# No. 221 (Brown 1868): "Irregular circular motion imparted to wheel, A. C is an elliptical spur-gear rotating round center, D, and is the driver. B is a small pinion with
# teeth of the same pitch, gearing with C. The center of this pinion is not fixed, but is carried by an arm or frame which vibrates on a center, A, so that as C revolves the frame
# rises and falls to enable pinion to remain in gear with it, notwithstanding the variation in its radius of contact. To keep the teeth of C and B in gear to a proper depth, and
# prevent them from riding over each other, wheel, C, has attached to it a plate which extends beyond it and is furnished with a groove, g, h, of similar elliptical form, for the
# reception of a pin or small roller attached to the vibrating arm concentric with pinion, B."
#
# Model (cm; drawing plane x-z, the shafts along y): C, an elliptical spur-gear of 24 teeth (module 0.6; pitch curve an ellipse 16.81 by 11.77, so its perimeter is
# 24 pitches) turns about its centre D. B (10 teeth) gears with C and with the wheel A (20 teeth), and turns on an arm that swings on A's centre. The pin on the arm, concentric
# with B (radius 0.45, clearance 0.04), works in the groove of the plate behind C: the pitch curve offset by B's pitch radius, so B stays at the right depth while the arm swings
# 17.0 degrees. A turns 24/20 = 1.2 times C on the mean, and 0.522 to 2.069 times as fast (kinematics: B rolling on C's pitch
# curve and on A's pitch circle). Straight-flanked teeth set along the normals of the pitch curve. Gravity is on. Only C is driven (6 rpm). Generator: opencode-runs/batch11/gen221.py.
number: 221
slug: elliptical-gear-swinging-pinion
name: An elliptical gear driving a wheel through a pinion on a swinging arm
brown: "Irregular circular motion imparted to wheel, A. C is an elliptical spur-gear rotating round center, D, and is the driver. B is a small pinion with teeth of the same pitch, gearing with C. The center of this pinion is not fixed, but is carried by an arm or frame which vibrates on a center, A, so that as C revolves the frame rises and falls to enable pinion to remain in gear with it, notwithstanding the variation in its radius of contact. To keep the teeth of C and B in gear to a proper depth, and prevent them from riding over each other, wheel, C, has attached to it a plate which extends beyond it and is furnished with a groove, g, h, of similar elliptical form, for the reception of a pin or small roller attached to the vibrating arm concentric with pinion, B."
units: cm
sim:
  timestep: 0.0002
  integrator: implicitfast
  iterations: 100
  solver: CG
  multiccd: true
  duration_s: 13.0
bodies:
  - id: gearC
    shape: part
    pos: [0, 0, 0]
    density: 2700
    friction: 0.1
    color: "#d9cfb6"
    pieces:
      - {kind: poly, points: [[7.805, -0.5954], [7.805, 0.5954], [8.825, 0.2241], [8.825, -0.2241]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[7.6981, 1.032], [7.195, 2.1113], [8.2764, 2.2057], [8.4657, 1.7995]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.8983, 2.509], [6.06, 3.3547], [7.0458, 3.8091], [7.3614, 3.4908]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.6225, 3.6809], [4.5967, 4.2857], [5.4346, 4.9758], [5.8207, 4.7481]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.0706, 4.5211], [2.9444, 4.9079], [3.6269, 5.752], [4.0508, 5.6063]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.3677, 5.0487], [1.1919, 5.237], [1.7198, 6.1855], [2.1624, 6.1146]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.5929, 5.2836], [-0.5979, 5.2834], [-0.2269, 6.3035], [0.2214, 6.3036]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.1944, 5.2367], [-2.3701, 5.0482], [-2.1651, 6.1141], [-1.7225, 6.1851]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.9467, 4.9072], [-4.0728, 4.5202], [-4.0533, 5.6054], [-3.6294, 5.7512]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-4.5987, 4.2847], [-5.6243, 3.6797], [-5.8228, 4.7468], [-5.4367, 4.9746]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-6.0615, 3.3534], [-6.8996, 2.5075], [-7.3629, 3.4891], [-7.0474, 3.8076]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-7.196, 2.1098], [-7.6986, 1.0304], [-8.4666, 1.7975], [-8.2773, 2.2039]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-7.8053, 0.5938], [-7.8048, -0.597], [-8.8249, -0.2262], [-8.8251, 0.2221]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-7.6981, -1.032], [-7.195, -2.1113], [-8.2764, -2.2057], [-8.4657, -1.7995]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-6.8983, -2.509], [-6.06, -3.3547], [-7.0458, -3.8091], [-7.3614, -3.4908]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-5.6225, -3.6809], [-4.5967, -4.2857], [-5.4346, -4.9758], [-5.8207, -4.7481]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-4.0706, -4.5211], [-2.9444, -4.9079], [-3.6269, -5.752], [-4.0508, -5.6063]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.3677, -5.0487], [-1.1919, -5.237], [-1.7198, -6.1855], [-2.1624, -6.1146]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.5929, -5.2836], [0.5979, -5.2834], [0.2269, -6.3035], [-0.2214, -6.3036]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.1944, -5.2367], [2.3701, -5.0482], [2.1651, -6.1141], [1.7225, -6.1851]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.9467, -4.9072], [4.0728, -4.5202], [4.0533, -5.6054], [3.6294, -5.7512]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.5987, -4.2847], [5.6243, -3.6797], [5.8228, -4.7468], [5.4367, -4.9746]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.0615, -3.3534], [6.8996, -2.5075], [7.3629, -3.4891], [7.0474, -3.8076]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[7.196, -2.1098], [7.6986, -1.0304], [8.4666, -1.7975], [8.2773, -2.2039]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[7.755, 0.0], [7.7399, 0.3237], [7.6945, 0.6468], [7.6183, 0.9701], [7.5118, 1.2899], [7.3746, 1.6066], [7.2058, 1.9205], [7.0072, 2.2274], [6.7783, 2.5272], [6.5183, 2.8199], [6.2306, 3.101], [5.9148, 3.3704], [5.5705, 3.6278], [5.2024, 3.8691], [4.8104, 4.0944], [4.3942, 4.3032], [3.9597, 4.4923], [3.5068, 4.6618], [3.0355, 4.8114], [2.5522, 4.9387], [2.0572, 5.0439], [1.5501, 5.1267], [1.0383, 5.1858], [0.5216, 5.2215], [0.0, 5.2335], [-0.5191, 5.2216], [-1.0358, 5.1861], [-1.5501, 5.1267], [-2.0548, 5.0443], [-2.5499, 4.9393], [-3.0355, 4.8114], [-3.5046, 4.6626], [-3.9575, 4.4932], [-4.3942, 4.3032], [-4.8084, 4.0954], [-5.2005, 3.8703], [-5.5705, 3.6278], [-5.9132, 3.3717], [-6.2291, 3.1023], [-6.5183, 2.8199], [-6.7771, 2.5286], [-7.0062, 2.2288], [-7.2058, 1.9205], [-7.3739, 1.6081], [-7.5112, 1.2914], [-7.6183, 0.9701], [-7.6942, 0.6483], [-7.7398, 0.3252], [-7.755, 0.0], [-7.7399, -0.3237], [-7.6945, -0.6468], [-7.6183, -0.9701], [-7.5118, -1.2899], [-7.3746, -1.6066], [-7.2058, -1.9205], [-7.0072, -2.2274], [-6.7783, -2.5272], [-6.5183, -2.8199], [-6.2306, -3.101], [-5.9148, -3.3704], [-5.5705, -3.6278], [-5.2024, -3.8691], [-4.8104, -4.0944], [-4.3942, -4.3032], [-3.9597, -4.4923], [-3.5068, -4.6618], [-3.0355, -4.8114], [-2.5522, -4.9387], [-2.0572, -5.0439], [-1.5501, -5.1267], [-1.0383, -5.1858], [-0.5216, -5.2215], [-0.0, -5.2335], [0.5191, -5.2216], [1.0358, -5.1861], [1.5501, -5.1267], [2.0548, -5.0443], [2.5499, -4.9393], [3.0355, -4.8114], [3.5046, -4.6626], [3.9575, -4.4932], [4.3942, -4.3032], [4.8084, -4.0954], [5.2005, -3.8703], [5.5705, -3.6278], [5.9132, -3.3717], [6.2291, -3.1023], [6.5183, -2.8199], [6.7771, -2.5286], [7.0062, -2.2288], [7.2058, -1.9205], [7.3739, -1.6081], [7.5112, -1.2914], [7.6183, -0.9701], [7.6942, -0.6483], [7.7398, -0.3252]], y: [-0.4, 0.4], collide: 0}
      - {kind: poly, points: [[11.895, 0.0], [11.8619, 0.709], [12.6585, 0.7835], [12.695, 0.0]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.915, 0.0], [10.8862, 0.6178], [10.0897, 0.5433], [10.115, 0.0]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.8619, 0.709], [11.7634, 1.4108], [12.5497, 1.5584], [12.6585, 0.7835]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.8862, 0.6178], [10.8002, 1.2299], [10.014, 1.0823], [10.0897, 0.5433]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.7634, 1.4108], [11.6006, 2.1018], [12.3701, 2.3204], [12.5497, 1.5584]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.8002, 1.2299], [10.6579, 1.8339], [9.8884, 1.6152], [10.014, 1.0823]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.6006, 2.1018], [11.3784, 2.7694], [12.1256, 3.0552], [12.3701, 2.3204]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.6579, 1.8339], [10.4631, 2.4191], [9.7159, 2.1333], [9.8884, 1.6152]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.3784, 2.7694], [11.1002, 3.412], [11.8201, 3.7609], [12.1256, 3.0552]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.4631, 2.4191], [10.2183, 2.9846], [9.4984, 2.6357], [9.7159, 2.1333]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.1002, 3.412], [10.7688, 4.0288], [11.4573, 4.4362], [11.8201, 3.7609]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.2183, 2.9846], [9.9254, 3.5298], [9.2369, 3.1224], [9.4984, 2.6357]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.7688, 4.0288], [10.392, 4.6113], [11.046, 5.0719], [11.4573, 4.4362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.9254, 3.5298], [9.5907, 4.047], [8.9367, 3.5863], [9.2369, 3.1224]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.392, 4.6113], [9.9727, 5.1607], [10.59, 5.6696], [11.046, 5.0719]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.5907, 4.047], [9.2166, 4.5373], [8.5993, 4.0284], [8.9367, 3.5863]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.9727, 5.1607], [9.513, 5.6785], [10.0917, 6.2308], [10.59, 5.6696]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.2166, 4.5373], [8.8041, 5.0018], [8.2255, 4.4494], [8.5993, 4.0284]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.513, 5.6785], [9.0211, 6.1592], [9.5603, 6.7502], [10.0917, 6.2308]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.8041, 5.0018], [8.3605, 5.4353], [7.8213, 4.8443], [8.2255, 4.4494]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.0211, 6.1592], [8.4981, 6.6055], [8.9973, 7.2307], [9.5603, 6.7502]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.3605, 5.4353], [7.8866, 5.8397], [7.3874, 5.2146], [7.8213, 4.8443]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.4981, 6.6055], [7.9446, 7.0194], [8.4034, 7.6748], [8.9973, 7.2307]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.8866, 5.8397], [7.3826, 6.2165], [6.9239, 5.5612], [7.3874, 5.2146]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.9446, 7.0194], [7.3686, 7.3972], [7.7872, 8.0789], [8.4034, 7.6748]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.3826, 6.2165], [6.8558, 6.562], [6.4372, 5.8803], [6.9239, 5.5612]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.3686, 7.3972], [6.77, 7.7412], [7.1487, 8.4459], [7.7872, 8.0789]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.8558, 6.562], [6.3062, 6.878], [5.9275, 6.1733], [6.4372, 5.8803]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.77, 7.7412], [6.1482, 8.0533], [6.4871, 8.7779], [7.1487, 8.4459]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.3062, 6.878], [5.733, 7.1656], [5.3941, 6.4409], [5.9275, 6.1733]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.1482, 8.0533], [5.5113, 8.3306], [5.8111, 9.0723], [6.4871, 8.7779]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.733, 7.1656], [5.144, 7.422], [4.8441, 6.6803], [5.3941, 6.4409]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.5113, 8.3306], [4.8584, 8.575], [5.1195, 9.3312], [5.8111, 9.0723]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.144, 7.422], [4.5384, 7.6487], [4.2773, 6.8925], [4.8441, 6.6803]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.8584, 8.575], [4.1884, 8.7876], [4.4111, 9.556], [5.1195, 9.3312]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.5384, 7.6487], [3.9154, 7.8464], [3.6927, 7.078], [4.2773, 6.8925]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.1884, 8.7876], [3.5096, 8.9665], [3.6946, 9.7448], [4.4111, 9.556]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.9154, 7.8464], [3.283, 8.013], [3.098, 7.2347], [3.6927, 7.078]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.5096, 8.9665], [2.821, 9.1128], [2.9686, 9.8991], [3.6946, 9.7448]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.283, 8.013], [2.6402, 8.1496], [2.4926, 7.3634], [3.098, 7.2347]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.821, 9.1128], [2.121, 9.2271], [2.2314, 10.0195], [2.9686, 9.8991]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.6402, 8.1496], [1.9859, 8.2565], [1.8756, 7.4641], [2.4926, 7.3634]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.121, 9.2271], [1.4185, 9.3084], [1.4919, 10.105], [2.2314, 10.0195]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.9859, 8.2565], [1.3285, 8.3325], [1.255, 7.5359], [1.8756, 7.4641]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.4185, 9.3084], [0.7119, 9.3571], [0.7487, 10.1563], [1.4919, 10.105]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.3285, 8.3325], [0.6669, 8.3782], [0.6301, 7.579], [1.255, 7.5359]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.7119, 9.3571], [0.0, 9.3735], [0.0, 10.1735], [0.7487, 10.1563]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.6669, 8.3782], [0.0, 8.3935], [0.0, 7.5935], [0.6301, 7.579]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.0, 9.3735], [-0.7085, 9.3573], [-0.7451, 10.1565], [0.0, 10.1735]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.0, 8.3935], [-0.6637, 8.3783], [-0.6271, 7.5792], [0.0, 7.5935]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.7085, 9.3573], [-1.4151, 9.3087], [-1.4884, 10.1053], [-0.7451, 10.1565]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.6637, 8.3783], [-1.3253, 8.3328], [-1.252, 7.5362], [-0.6271, 7.5792]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.4151, 9.3087], [-2.121, 9.2271], [-2.2314, 10.0195], [-1.4884, 10.1053]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.3253, 8.3328], [-1.9859, 8.2565], [-1.8756, 7.4641], [-1.252, 7.5362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.121, 9.2271], [-2.8176, 9.1134], [-2.9651, 9.8997], [-2.2314, 10.0195]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.9859, 8.2565], [-2.6371, 8.1502], [-2.4896, 7.3639], [-1.8756, 7.4641]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.8176, 9.1134], [-3.5063, 8.9673], [-3.6912, 9.7456], [-2.9651, 9.8997]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.6371, 8.1502], [-3.2799, 8.0138], [-3.0951, 7.2354], [-2.4896, 7.3639]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.5063, 8.9673], [-4.1884, 8.7876], [-4.4111, 9.556], [-3.6912, 9.7456]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.2799, 8.0138], [-3.9154, 7.8464], [-3.6927, 7.078], [-3.0951, 7.2354]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.1884, 8.7876], [-4.8552, 8.5761], [-5.1162, 9.3323], [-4.4111, 9.556]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.9154, 7.8464], [-4.5355, 7.6497], [-4.2745, 6.8935], [-3.6927, 7.078]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.8552, 8.5761], [-5.5082, 8.3318], [-5.8078, 9.0736], [-5.1162, 9.3323]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.5355, 7.6497], [-5.1411, 7.4232], [-4.8415, 6.6814], [-4.2745, 6.8935]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.5082, 8.3318], [-6.1482, 8.0533], [-6.4871, 8.7779], [-5.8078, 9.0736]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.1411, 7.4232], [-5.733, 7.1656], [-5.3941, 6.4409], [-4.8415, 6.6814]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.1482, 8.0533], [-6.7671, 7.7428], [-7.1456, 8.4476], [-6.4871, 8.7779]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.733, 7.1656], [-6.3035, 6.8794], [-5.925, 6.1746], [-5.3941, 6.4409]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.7671, 7.7428], [-7.3658, 7.3989], [-7.7842, 8.0808], [-7.1456, 8.4476]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.3035, 6.8794], [-6.8532, 6.5636], [-6.4348, 5.8818], [-5.925, 6.1746]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.3658, 7.3989], [-7.9446, 7.0194], [-8.4034, 7.6748], [-7.7842, 8.0808]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.8532, 6.5636], [-7.3826, 6.2165], [-6.9239, 5.5612], [-6.4348, 5.8818]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.9446, 7.0194], [-8.4956, 6.6076], [-8.9946, 7.2329], [-8.4034, 7.6748]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.3826, 6.2165], [-7.8843, 5.8416], [-7.3853, 5.2163], [-6.9239, 5.5612]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.4956, 6.6076], [-9.0186, 6.1615], [-9.5577, 6.7526], [-8.9946, 7.2329]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.8843, 5.8416], [-8.3583, 5.4373], [-7.8193, 4.8462], [-7.3853, 5.2163]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.0186, 6.1615], [-9.513, 5.6785], [-10.0917, 6.2308], [-9.5577, 6.7526]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.3583, 5.4373], [-8.8041, 5.0018], [-8.2255, 4.4494], [-7.8193, 4.8462]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.513, 5.6785], [-9.9706, 5.1632], [-10.5877, 5.6723], [-10.0917, 6.2308]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.8041, 5.0018], [-9.2147, 4.5396], [-8.5976, 4.0305], [-8.2255, 4.4494]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.9706, 5.1632], [-10.39, 4.614], [-11.0439, 5.0749], [-10.5877, 5.6723]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.2147, 4.5396], [-9.589, 4.0494], [-8.9351, 3.5885], [-8.5976, 4.0305]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.39, 4.614], [-10.7688, 4.0288], [-11.4573, 4.4362], [-11.0439, 5.0749]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.589, 4.0494], [-9.9254, 3.5298], [-9.2369, 3.1224], [-8.9351, 3.5885]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.7688, 4.0288], [-11.0987, 3.415], [-11.8185, 3.7642], [-11.4573, 4.4362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.9254, 3.5298], [-10.217, 2.9873], [-9.4972, 2.6381], [-9.2369, 3.1224]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.0987, 3.415], [-11.3772, 2.7725], [-12.1242, 3.0587], [-11.8185, 3.7642]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.217, 2.9873], [-10.4621, 2.4219], [-9.715, 2.1357], [-9.4972, 2.6381]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.3772, 2.7725], [-11.6006, 2.1018], [-12.3701, 2.3204], [-12.1242, 3.0587]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.4621, 2.4219], [-10.6579, 1.8339], [-9.8884, 1.6152], [-9.715, 2.1357]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.6006, 2.1018], [-11.7628, 1.4141], [-12.549, 1.5621], [-12.3701, 2.3204]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.6579, 1.8339], [-10.7997, 1.2329], [-10.0135, 1.0849], [-9.8884, 1.6152]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.7628, 1.4141], [-11.8616, 0.7124], [-12.6581, 0.7872], [-12.549, 1.5621]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.7997, 1.2329], [-10.8859, 0.6208], [-10.0894, 0.546], [-10.0135, 1.0849]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.8616, 0.7124], [-11.895, 0.0], [-12.695, 0.0], [-12.6581, 0.7872]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.8859, 0.6208], [-10.915, 0.0], [-10.115, 0.0], [-10.0894, 0.546]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.895, 0.0], [-11.8619, -0.709], [-12.6585, -0.7835], [-12.695, 0.0]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.915, 0.0], [-10.8862, -0.6178], [-10.0897, -0.5433], [-10.115, 0.0]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.8619, -0.709], [-11.7634, -1.4108], [-12.5497, -1.5584], [-12.6585, -0.7835]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.8862, -0.6178], [-10.8002, -1.2299], [-10.014, -1.0823], [-10.0897, -0.5433]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.7634, -1.4108], [-11.6006, -2.1018], [-12.3701, -2.3204], [-12.5497, -1.5584]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.8002, -1.2299], [-10.6579, -1.8339], [-9.8884, -1.6152], [-10.014, -1.0823]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.6006, -2.1018], [-11.3784, -2.7694], [-12.1256, -3.0552], [-12.3701, -2.3204]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.6579, -1.8339], [-10.4631, -2.4191], [-9.7159, -2.1333], [-9.8884, -1.6152]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.3784, -2.7694], [-11.1002, -3.412], [-11.8201, -3.7609], [-12.1256, -3.0552]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.4631, -2.4191], [-10.2183, -2.9846], [-9.4984, -2.6357], [-9.7159, -2.1333]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-11.1002, -3.412], [-10.7688, -4.0288], [-11.4573, -4.4362], [-11.8201, -3.7609]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.2183, -2.9846], [-9.9254, -3.5298], [-9.2369, -3.1224], [-9.4984, -2.6357]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.7688, -4.0288], [-10.392, -4.6113], [-11.046, -5.0719], [-11.4573, -4.4362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.9254, -3.5298], [-9.5907, -4.047], [-8.9367, -3.5863], [-9.2369, -3.1224]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-10.392, -4.6113], [-9.9727, -5.1607], [-10.59, -5.6696], [-11.046, -5.0719]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.5907, -4.047], [-9.2166, -4.5373], [-8.5993, -4.0284], [-8.9367, -3.5863]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.9727, -5.1607], [-9.513, -5.6785], [-10.0917, -6.2308], [-10.59, -5.6696]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.2166, -4.5373], [-8.8041, -5.0018], [-8.2255, -4.4494], [-8.5993, -4.0284]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.513, -5.6785], [-9.0211, -6.1592], [-9.5603, -6.7502], [-10.0917, -6.2308]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.8041, -5.0018], [-8.3605, -5.4353], [-7.8213, -4.8443], [-8.2255, -4.4494]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-9.0211, -6.1592], [-8.4981, -6.6055], [-8.9973, -7.2307], [-9.5603, -6.7502]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.3605, -5.4353], [-7.8866, -5.8397], [-7.3874, -5.2146], [-7.8213, -4.8443]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-8.4981, -6.6055], [-7.9446, -7.0194], [-8.4034, -7.6748], [-8.9973, -7.2307]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.8866, -5.8397], [-7.3826, -6.2165], [-6.9239, -5.5612], [-7.3874, -5.2146]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.9446, -7.0194], [-7.3686, -7.3972], [-7.7872, -8.0789], [-8.4034, -7.6748]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.3826, -6.2165], [-6.8558, -6.562], [-6.4372, -5.8803], [-6.9239, -5.5612]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-7.3686, -7.3972], [-6.77, -7.7412], [-7.1487, -8.4459], [-7.7872, -8.0789]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.8558, -6.562], [-6.3062, -6.878], [-5.9275, -6.1733], [-6.4372, -5.8803]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.77, -7.7412], [-6.1482, -8.0533], [-6.4871, -8.7779], [-7.1487, -8.4459]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.3062, -6.878], [-5.733, -7.1656], [-5.3941, -6.4409], [-5.9275, -6.1733]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-6.1482, -8.0533], [-5.5113, -8.3306], [-5.8111, -9.0723], [-6.4871, -8.7779]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.733, -7.1656], [-5.144, -7.422], [-4.8441, -6.6803], [-5.3941, -6.4409]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.5113, -8.3306], [-4.8584, -8.575], [-5.1195, -9.3312], [-5.8111, -9.0723]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-5.144, -7.422], [-4.5384, -7.6487], [-4.2773, -6.8925], [-4.8441, -6.6803]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.8584, -8.575], [-4.1884, -8.7876], [-4.4111, -9.556], [-5.1195, -9.3312]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.5384, -7.6487], [-3.9154, -7.8464], [-3.6927, -7.078], [-4.2773, -6.8925]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-4.1884, -8.7876], [-3.5096, -8.9665], [-3.6946, -9.7448], [-4.4111, -9.556]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.9154, -7.8464], [-3.283, -8.013], [-3.098, -7.2347], [-3.6927, -7.078]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.5096, -8.9665], [-2.821, -9.1128], [-2.9686, -9.8991], [-3.6946, -9.7448]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-3.283, -8.013], [-2.6402, -8.1496], [-2.4926, -7.3634], [-3.098, -7.2347]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.821, -9.1128], [-2.121, -9.2271], [-2.2314, -10.0195], [-2.9686, -9.8991]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.6402, -8.1496], [-1.9859, -8.2565], [-1.8756, -7.4641], [-2.4926, -7.3634]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-2.121, -9.2271], [-1.4185, -9.3084], [-1.4919, -10.105], [-2.2314, -10.0195]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.9859, -8.2565], [-1.3285, -8.3325], [-1.255, -7.5359], [-1.8756, -7.4641]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.4185, -9.3084], [-0.7119, -9.3571], [-0.7487, -10.1563], [-1.4919, -10.105]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-1.3285, -8.3325], [-0.6669, -8.3782], [-0.6301, -7.579], [-1.255, -7.5359]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.7119, -9.3571], [-0.0, -9.3735], [-0.0, -10.1735], [-0.7487, -10.1563]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.6669, -8.3782], [-0.0, -8.3935], [-0.0, -7.5935], [-0.6301, -7.579]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.0, -9.3735], [0.7085, -9.3573], [0.7451, -10.1565], [-0.0, -10.1735]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[-0.0, -8.3935], [0.6637, -8.3783], [0.6271, -7.5792], [-0.0, -7.5935]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.7085, -9.3573], [1.4151, -9.3087], [1.4884, -10.1053], [0.7451, -10.1565]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[0.6637, -8.3783], [1.3253, -8.3328], [1.252, -7.5362], [0.6271, -7.5792]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.4151, -9.3087], [2.121, -9.2271], [2.2314, -10.0195], [1.4884, -10.1053]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.3253, -8.3328], [1.9859, -8.2565], [1.8756, -7.4641], [1.252, -7.5362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.121, -9.2271], [2.8176, -9.1134], [2.9651, -9.8997], [2.2314, -10.0195]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[1.9859, -8.2565], [2.6371, -8.1502], [2.4896, -7.3639], [1.8756, -7.4641]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.8176, -9.1134], [3.5063, -8.9673], [3.6912, -9.7456], [2.9651, -9.8997]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[2.6371, -8.1502], [3.2799, -8.0138], [3.0951, -7.2354], [2.4896, -7.3639]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.5063, -8.9673], [4.1884, -8.7876], [4.4111, -9.556], [3.6912, -9.7456]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.2799, -8.0138], [3.9154, -7.8464], [3.6927, -7.078], [3.0951, -7.2354]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.1884, -8.7876], [4.8552, -8.5761], [5.1162, -9.3323], [4.4111, -9.556]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[3.9154, -7.8464], [4.5355, -7.6497], [4.2745, -6.8935], [3.6927, -7.078]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.8552, -8.5761], [5.5082, -8.3318], [5.8078, -9.0736], [5.1162, -9.3323]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[4.5355, -7.6497], [5.1411, -7.4232], [4.8415, -6.6814], [4.2745, -6.8935]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.5082, -8.3318], [6.1482, -8.0533], [6.4871, -8.7779], [5.8078, -9.0736]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.1411, -7.4232], [5.733, -7.1656], [5.3941, -6.4409], [4.8415, -6.6814]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.1482, -8.0533], [6.7671, -7.7428], [7.1456, -8.4476], [6.4871, -8.7779]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[5.733, -7.1656], [6.3035, -6.8794], [5.925, -6.1746], [5.3941, -6.4409]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.7671, -7.7428], [7.3658, -7.3989], [7.7842, -8.0808], [7.1456, -8.4476]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.3035, -6.8794], [6.8532, -6.5636], [6.4348, -5.8818], [5.925, -6.1746]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.3658, -7.3989], [7.9446, -7.0194], [8.4034, -7.6748], [7.7842, -8.0808]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[6.8532, -6.5636], [7.3826, -6.2165], [6.9239, -5.5612], [6.4348, -5.8818]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.9446, -7.0194], [8.4956, -6.6076], [8.9946, -7.2329], [8.4034, -7.6748]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.3826, -6.2165], [7.8843, -5.8416], [7.3853, -5.2163], [6.9239, -5.5612]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.4956, -6.6076], [9.0186, -6.1615], [9.5577, -6.7526], [8.9946, -7.2329]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[7.8843, -5.8416], [8.3583, -5.4373], [7.8193, -4.8462], [7.3853, -5.2163]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.0186, -6.1615], [9.513, -5.6785], [10.0917, -6.2308], [9.5577, -6.7526]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.3583, -5.4373], [8.8041, -5.0018], [8.2255, -4.4494], [7.8193, -4.8462]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.513, -5.6785], [9.9706, -5.1632], [10.5877, -5.6723], [10.0917, -6.2308]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[8.8041, -5.0018], [9.2147, -4.5396], [8.5976, -4.0305], [8.2255, -4.4494]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.9706, -5.1632], [10.39, -4.614], [11.0439, -5.0749], [10.5877, -5.6723]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.2147, -4.5396], [9.589, -4.0494], [8.9351, -3.5885], [8.5976, -4.0305]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.39, -4.614], [10.7688, -4.0288], [11.4573, -4.4362], [11.0439, -5.0749]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.589, -4.0494], [9.9254, -3.5298], [9.2369, -3.1224], [8.9351, -3.5885]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.7688, -4.0288], [11.0987, -3.415], [11.8185, -3.7642], [11.4573, -4.4362]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[9.9254, -3.5298], [10.217, -2.9873], [9.4972, -2.6381], [9.2369, -3.1224]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.0987, -3.415], [11.3772, -2.7725], [12.1242, -3.0587], [11.8185, -3.7642]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.217, -2.9873], [10.4621, -2.4219], [9.715, -2.1357], [9.4972, -2.6381]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.3772, -2.7725], [11.6006, -2.1018], [12.3701, -2.3204], [12.1242, -3.0587]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.4621, -2.4219], [10.6579, -1.8339], [9.8884, -1.6152], [9.715, -2.1357]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.6006, -2.1018], [11.7628, -1.4141], [12.549, -1.5621], [12.3701, -2.3204]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.6579, -1.8339], [10.7997, -1.2329], [10.0135, -1.0849], [9.8884, -1.6152]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.7628, -1.4141], [11.8616, -0.7124], [12.6581, -0.7872], [12.549, -1.5621]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.7997, -1.2329], [10.8859, -0.6208], [10.0894, -0.546], [10.0135, -1.0849]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[11.8616, -0.7124], [11.895, -0.0], [12.695, -0.0], [12.6581, -0.7872]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[10.8859, -0.6208], [10.915, -0.0], [10.115, -0.0], [10.0894, -0.546]], y: [1.0, 1.6], collide: 2}
      - {kind: poly, points: [[12.695, 0.0], [12.6585, 0.7835], [12.5497, 1.5584], [12.3701, 2.3204], [12.1256, 3.0552], [11.8201, 3.7609], [11.4573, 4.4362], [11.046, 5.0719], [10.59, 5.6696], [10.0917, 6.2308], [9.5603, 6.7502], [8.9973, 7.2307], [8.4034, 7.6748], [7.7872, 8.0789], [7.1487, 8.4459], [6.4871, 8.7779], [5.8111, 9.0723], [5.1195, 9.3312], [4.4111, 9.556], [3.6946, 9.7448], [2.9686, 9.8991], [2.2314, 10.0195], [1.4919, 10.105], [0.7487, 10.1563], [0.0, 10.1735], [-0.7451, 10.1565], [-1.4884, 10.1053], [-2.2314, 10.0195], [-2.9651, 9.8997], [-3.6912, 9.7456], [-4.4111, 9.556], [-5.1162, 9.3323], [-5.8078, 9.0736], [-6.4871, 8.7779], [-7.1456, 8.4476], [-7.7842, 8.0808], [-8.4034, 7.6748], [-8.9946, 7.2329], [-9.5577, 6.7526], [-10.0917, 6.2308], [-10.5877, 5.6723], [-11.0439, 5.0749], [-11.4573, 4.4362], [-11.8185, 3.7642], [-12.1242, 3.0587], [-12.3701, 2.3204], [-12.549, 1.5621], [-12.6581, 0.7872], [-12.695, 0.0], [-12.6585, -0.7835], [-12.5497, -1.5584], [-12.3701, -2.3204], [-12.1256, -3.0552], [-11.8201, -3.7609], [-11.4573, -4.4362], [-11.046, -5.0719], [-10.59, -5.6696], [-10.0917, -6.2308], [-9.5603, -6.7502], [-8.9973, -7.2307], [-8.4034, -7.6748], [-7.7872, -8.0789], [-7.1487, -8.4459], [-6.4871, -8.7779], [-5.8111, -9.0723], [-5.1195, -9.3312], [-4.4111, -9.556], [-3.6946, -9.7448], [-2.9686, -9.8991], [-2.2314, -10.0195], [-1.4919, -10.105], [-0.7487, -10.1563], [-0.0, -10.1735], [0.7451, -10.1565], [1.4884, -10.1053], [2.2314, -10.0195], [2.9651, -9.8997], [3.6912, -9.7456], [4.4111, -9.556], [5.1162, -9.3323], [5.8078, -9.0736], [6.4871, -8.7779], [7.1456, -8.4476], [7.7842, -8.0808], [8.4034, -7.6748], [8.9946, -7.2329], [9.5577, -6.7526], [10.0917, -6.2308], [10.5877, -5.6723], [11.0439, -5.0749], [11.4573, -4.4362], [11.8185, -3.7642], [12.1242, -3.0587], [12.3701, -2.3204], [12.549, -1.5621], [12.6581, -0.7872]], y: [1.6, 1.8], collide: 0, color: "#c2b694"}
      - {kind: poly, points: [[10.915, 0.0], [10.8862, 0.6178], [10.8002, 1.2299], [10.6579, 1.8339], [10.4631, 2.4191], [10.2183, 2.9846], [9.9254, 3.5298], [9.5907, 4.047], [9.2166, 4.5373], [8.8041, 5.0018], [8.3605, 5.4353], [7.8866, 5.8397], [7.3826, 6.2165], [6.8558, 6.562], [6.3062, 6.878], [5.733, 7.1656], [5.144, 7.422], [4.5384, 7.6487], [3.9154, 7.8464], [3.283, 8.013], [2.6402, 8.1496], [1.9859, 8.2565], [1.3285, 8.3325], [0.6669, 8.3782], [0.0, 8.3935], [-0.6637, 8.3783], [-1.3253, 8.3328], [-1.9859, 8.2565], [-2.6371, 8.1502], [-3.2799, 8.0138], [-3.9154, 7.8464], [-4.5355, 7.6497], [-5.1411, 7.4232], [-5.733, 7.1656], [-6.3035, 6.8794], [-6.8532, 6.5636], [-7.3826, 6.2165], [-7.8843, 5.8416], [-8.3583, 5.4373], [-8.8041, 5.0018], [-9.2147, 4.5396], [-9.589, 4.0494], [-9.9254, 3.5298], [-10.217, 2.9873], [-10.4621, 2.4219], [-10.6579, 1.8339], [-10.7997, 1.2329], [-10.8859, 0.6208], [-10.915, 0.0], [-10.8862, -0.6178], [-10.8002, -1.2299], [-10.6579, -1.8339], [-10.4631, -2.4191], [-10.2183, -2.9846], [-9.9254, -3.5298], [-9.5907, -4.047], [-9.2166, -4.5373], [-8.8041, -5.0018], [-8.3605, -5.4353], [-7.8866, -5.8397], [-7.3826, -6.2165], [-6.8558, -6.562], [-6.3062, -6.878], [-5.733, -7.1656], [-5.144, -7.422], [-4.5384, -7.6487], [-3.9154, -7.8464], [-3.283, -8.013], [-2.6402, -8.1496], [-1.9859, -8.2565], [-1.3285, -8.3325], [-0.6669, -8.3782], [-0.0, -8.3935], [0.6637, -8.3783], [1.3253, -8.3328], [1.9859, -8.2565], [2.6371, -8.1502], [3.2799, -8.0138], [3.9154, -7.8464], [4.5355, -7.6497], [5.1411, -7.4232], [5.733, -7.1656], [6.3035, -6.8794], [6.8532, -6.5636], [7.3826, -6.2165], [7.8843, -5.8416], [8.3583, -5.4373], [8.8041, -5.0018], [9.2147, -4.5396], [9.589, -4.0494], [9.9254, -3.5298], [10.217, -2.9873], [10.4621, -2.4219], [10.6579, -1.8339], [10.7997, -1.2329], [10.8859, -0.6208]], y: [1.0, 1.6], collide: 0, color: "#cdbf9c"}
      - {kind: disc, center: [0.0, 0.0], radius: 0.7, y: [-1.0, 3.6], collide: 0, color: "#8f8a80"}   # C's shaft at D
  - id: arm
    shape: part
    pos: [7.7942, 0, 13.3835]
    density: 2700
    friction: 0.1
    color: "#a39a86"
    pieces:
      - {kind: poly, points: [[7.4442, 13.9897], [8.1442, 12.7773], [0.275, 8.4072], [-0.275, 9.3598]], y: [-2.3, -1.7], collide: 0}   # the arm
      - {kind: disc, center: [7.7942, 13.3835], radius: 0.9, y: [-2.3, -1.7], collide: 0}
      - {kind: disc, center: [0.0, 8.8835], radius: 0.65, y: [-2.3, -1.7], collide: 0}
      - {kind: disc, center: [0.0, 8.8835], radius: 0.3, y: [-1.7, 0.9], collide: 0, color: "#6f6a60"}   # B's stud
      - {kind: disc, center: [0.0, 8.8835], radius: 0.45, y: [0.9, 1.7], collide: 1, color: "#6f6a60"}   # the pin in the groove, concentric with B
  - id: pinionB
    shape: part
    pos: [0.0, 0, 8.8835]
    mount: arm
    density: 2700
    friction: 0.1
    color: "#b8ad97"
    pieces:
      - {kind: poly, points: [[2.4, 8.2881], [2.4, 9.4789], [3.42, 9.1076], [3.42, 8.6594]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[2.2916, 9.8125], [1.5917, 10.7759], [2.6351, 11.0751], [2.8986, 10.7124]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[1.3079, 10.9821], [0.1754, 11.35], [0.8437, 12.2054], [1.27, 12.0669]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[-0.1754, 11.35], [-1.3079, 10.9821], [-1.27, 12.0669], [-0.8437, 12.2054]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[-1.5917, 10.7759], [-2.2916, 9.8125], [-2.8986, 10.7124], [-2.6351, 11.0751]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[-2.4, 9.4789], [-2.4, 8.2881], [-3.42, 8.6594], [-3.42, 9.1076]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[-2.2916, 7.9545], [-1.5917, 6.9912], [-2.6351, 6.692], [-2.8986, 7.0546]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[-1.3079, 6.785], [-0.1754, 6.417], [-0.8437, 5.5616], [-1.27, 5.7002]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[0.1754, 6.417], [1.3079, 6.785], [1.27, 5.7002], [0.8437, 5.5616]], y: [-1.4, 0.4], collide: 1}
      - {kind: poly, points: [[1.5917, 6.9912], [2.2916, 7.9545], [2.8986, 7.0546], [2.6351, 6.692]], y: [-1.4, 0.4], collide: 1}
      - {kind: disc, center: [0.0, 8.8835], radius: 2.35, y: [-1.4, 0.4], collide: 0}
  - id: wheelA
    shape: part
    pos: [7.7942, 0, 13.3835]
    density: 2700
    friction: 0.1
    color: "#c9b88f"
    pieces:
      - {kind: poly, points: [[13.1238, 14.4372], [12.7662, 15.573], [13.8506, 15.5252], [13.9852, 15.0976]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[12.5373, 16.0325], [11.8463, 17.0022], [12.8924, 17.2919], [13.1525, 16.9268]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[11.4866, 17.3686], [10.5297, 18.0773], [11.4351, 18.676], [11.7953, 18.4092]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[10.0744, 18.3146], [8.9454, 18.6929], [9.6215, 19.5421], [10.0465, 19.3997]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[8.4391, 18.7778], [7.2484, 18.7887], [7.6289, 19.8053], [8.0772, 19.8012]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[6.7406, 18.7131], [5.6048, 18.3555], [5.6526, 19.4399], [6.0801, 19.5745]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[5.1452, 18.1266], [4.1755, 17.4356], [3.8859, 18.4817], [4.2509, 18.7418]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[3.8092, 17.0759], [3.1005, 16.119], [2.5017, 17.0244], [2.7685, 17.3846]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[2.8632, 15.6637], [2.4849, 14.5347], [1.6357, 15.2108], [1.7781, 15.6358]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[2.3999, 14.0283], [2.389, 12.8376], [1.3724, 13.2182], [1.3766, 13.6665]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[2.4647, 12.3298], [2.8222, 11.1941], [1.7378, 11.2419], [1.6032, 11.6694]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[3.0511, 10.7345], [3.7422, 9.7648], [2.6961, 9.4752], [2.4359, 9.8402]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[4.1019, 9.3984], [5.0587, 8.6897], [4.1533, 8.091], [3.7931, 8.3578]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[5.514, 8.4525], [6.6431, 8.0742], [5.967, 7.225], [5.542, 7.3674]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[7.1494, 7.9892], [8.3401, 7.9783], [7.9595, 6.9617], [7.5113, 6.9658]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[8.8479, 8.054], [9.9837, 8.4115], [9.9359, 7.3271], [9.5083, 7.1925]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[10.4433, 8.6404], [11.413, 9.3314], [11.7026, 8.2853], [11.3375, 8.0252]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[11.7793, 9.6911], [12.488, 10.648], [13.0867, 9.7426], [12.8199, 9.3824]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[12.7253, 11.1033], [13.1036, 12.2324], [13.9528, 11.5563], [13.8104, 11.1313]], y: [-1.4, -0.6], collide: 2}
      - {kind: poly, points: [[13.1885, 12.7387], [13.1995, 13.9294], [14.216, 13.5488], [14.2119, 13.1006]], y: [-1.4, -0.6], collide: 2}
      - {kind: disc, center: [7.7942, 13.3835], radius: 5.35, y: [-1.4, -0.6], collide: 0, inner: 1.2}
      - {kind: disc, center: [7.7942, 13.3835], radius: 1.3, y: [-1.4, -0.6], collide: 0}
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    density: 7800
    color: "#cfc6b4"
    pieces:
      - {kind: disc, center: [7.7942, 13.3835], radius: 0.5, y: [-2.6, 3.6], collide: 0, color: "#8f8a80"}   # A's shaft
      - {kind: disc, center: [0.0, 0.0], radius: 1.2, y: [3.0, 3.6], collide: 0}
      - {kind: disc, center: [7.7942, 13.3835], radius: 1.2, y: [3.0, 3.6], collide: 0}
      - {kind: poly, points: [[-0.9, 0.0], [0.9, 0.0], [1.6, -11.0], [-1.6, -11.0]], y: [3.0, 3.6], collide: 0}   # the frame, behind
      - {kind: poly, points: [[-0.6, -0.6], [0.6, 0.6], [8.3942, 13.9835], [7.1942, 12.7835]], y: [3.0, 3.6], collide: 0}
joints:
  - {id: j_c, type: hinge, body: gearC, axis: [0, -1, 0], damping: 0.01}   # the one driven joint; +: counter-clockwise
  - {id: j_arm, type: hinge, body: arm, axis: [0, -1, 0], damping: 0.002}
  - {id: j_b, type: hinge, body: pinionB, axis: [0, -1, 0], damping: 0.0005}
  - {id: j_a, type: hinge, body: wheelA, axis: [0, -1, 0], damping: 0.002, frictionloss: 0.002}
contact: {solref: [0.002, 1.0], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_c, kind: velocity, rpm: 6, kv: 20, max_torque: 40}
checks:
  - {type: ratio, out: j_a, in: j_c, expect: 1.2, tol: 0.04, settle_s: 0.5, window_s: 10}   # 24/20 on the mean (one turn of C)
  - {type: ratio_range, out: j_a, in: j_c, min: 0.444, max: 2.318, min_swing: 0.774, settle_s: 0.5, window_s: 12, slices: 48}   # 0.522..2.069 (kinematics)
  - {type: penetration, max: 0.001, settle_s: 0.5}
camera: {target: [2.5, 0, -1.5], position: [4.0, -100.0, 14.0], fov: 34}
display:
  output: j_a
  labels: {j_c: "Elliptical gear C (driver)", j_a: "Wheel A", j_arm: "Arm"}
  proof: {label: "Teeth and pin out of contact", sub: "C turns alone"}

