# No. 191 (Brown 1868): "Scroll-gears for obtaining a gradually increasing speed."
#
# Model (cm): two equal scroll gears, each a logarithmic spiral of pitch r = 4 e^(0.2098 phi) over 300 degrees (radius 4 to 12),
# turning on shafts through their poles 16 apart. Two equal log spirals turned face to face roll on each other without slip at every angle
# (their radii in contact always sum to 16 and their arcs are equal), so the pitch curves carry 26 straight-flanked teeth (20 deg) on the driver and
# 27 on the driven at equal arc pitch 1.498, each its own convex piece square to the curve. The left gear is the one driven joint (10 turns a minute);
# the right one turns only by tooth contact, at -r1/r2 of its speed, which grows as the driver's radius in contact grows: from 0.36 to 2.62
# in 4.6 s, less than one turn, as scroll-gears can only work. Each gear carries a balance weight behind (a disc) that puts its centre of mass on its shaft. Generator: opencode-runs/batch11/gen191.py.
number: 191
slug: scroll-gears
name: Scroll-gears for a gradually increasing speed
brown: "Scroll-gears for obtaining a gradually increasing speed."
units: cm
sim:
  timestep: 0.0002
  integrator: implicitfast
  iterations: 100
  solver: CG
  multiccd: true
  duration_s: 4.6
bodies:
  - id: ga
    shape: part
    pos: [-8.0, 0, 0]
    density: 7800
    friction: 0.1
    color: "#c9b88f"
    pieces:
      - {kind: poly, points: [[-8.0, 0.0], [-4.707, 0.7029], [-4.5855, 0.4255]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.5855, 0.4255], [-4.4863, 0.1319]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.4863, 0.1319], [-4.4115, -0.1757]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.4115, -0.1757], [-4.3628, -0.4955]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.3628, -0.4955], [-4.3416, -0.8254]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.3416, -0.8254], [-4.3495, -1.163]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.3495, -1.163], [-4.3876, -1.5058]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.3876, -1.5058], [-4.4568, -1.8513]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.4568, -1.8513], [-4.5581, -2.1968]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.5581, -2.1968], [-4.6918, -2.5392]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.6918, -2.5392], [-4.8584, -2.8757]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-4.8584, -2.8757], [-5.0578, -3.2033]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-5.0578, -3.2033], [-5.2899, -3.5188]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-5.2899, -3.5188], [-5.554, -3.819]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-5.554, -3.819], [-5.8494, -4.1009]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-5.8494, -4.1009], [-6.1749, -4.3614]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-6.1749, -4.3614], [-6.5292, -4.5974]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-6.5292, -4.5974], [-6.9105, -4.8059]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-6.9105, -4.8059], [-7.3168, -4.9839]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-7.3168, -4.9839], [-7.7459, -5.1289]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-7.7459, -5.1289], [-8.1952, -5.2381]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-8.1952, -5.2381], [-8.6617, -5.3092]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-8.6617, -5.3092], [-9.1424, -5.34]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-9.1424, -5.34], [-9.6339, -5.3286]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-9.6339, -5.3286], [-10.1326, -5.2732]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-10.1326, -5.2732], [-10.6347, -5.1725]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-10.6347, -5.1725], [-11.1362, -5.0256]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-11.1362, -5.0256], [-11.6329, -4.8316]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-11.6329, -4.8316], [-12.1206, -4.5901]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-12.1206, -4.5901], [-12.5949, -4.3014]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-12.5949, -4.3014], [-13.0514, -3.9657]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-13.0514, -3.9657], [-13.4855, -3.5838]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-13.4855, -3.5838], [-13.8927, -3.1571]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-13.8927, -3.1571], [-14.2687, -2.6873]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.2687, -2.6873], [-14.6091, -2.1763]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.6091, -2.1763], [-14.9095, -1.6267]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.9095, -1.6267], [-15.166, -1.0414]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.166, -1.0414], [-15.3746, -0.4239]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.3746, -0.4239], [-15.5317, 0.2222]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.5317, 0.2222], [-15.6339, 0.8928]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.6339, 0.8928], [-15.6781, 1.5832]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.6781, 1.5832], [-15.6617, 2.2887]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.6617, 2.2887], [-15.5823, 3.004]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.5823, 3.004], [-15.438, 3.7238]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.438, 3.7238], [-15.2275, 4.4423]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-15.2275, 4.4423], [-14.9496, 5.1536]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.9496, 5.1536], [-14.6042, 5.8515]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.6042, 5.8515], [-14.1912, 6.5299]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-14.1912, 6.5299], [-13.7113, 7.1823]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-13.7113, 7.1823], [-13.1658, 7.8025]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-13.1658, 7.8025], [-12.5566, 8.384]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-12.5566, 8.384], [-11.886, 8.9206]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-11.886, 8.9206], [-11.1571, 9.4061]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-11.1571, 9.4061], [-10.3735, 9.8345]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-10.3735, 9.8345], [-9.5395, 10.2]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-9.5395, 10.2], [-8.66, 10.4971]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-8.66, 10.4971], [-7.7401, 10.7207]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-7.7401, 10.7207], [-6.786, 10.8662]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-6.786, 10.8662], [-5.804, 10.9291]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[-8.0, 0.0], [-5.804, 10.9291], [-4.8021, 10.9058]], y: [-0.3, 0.3], collide: 0}
      - {kind: disc, center: [-8.0, 0], radius: 1.4, y: [-0.9, 0.9], collide: 0, color: "#8f8a80"}   # the hub
      - {kind: disc, center: [-5.8995, -2.142], radius: 3.0, y: [0.65, 4.27], collide: 0, color: "#6f6a60"}   # the balance weight, behind
      - {kind: poly, points: [[-4.5427, 0.623], [-4.2655, -0.3522], [-3.3868, 0.2831], [-3.4612, 0.5449]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-4.2366, -0.6498], [-4.3011, -1.6616], [-3.2607, -1.3563], [-3.2434, -1.0847]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-4.3723, -1.9642], [-4.7497, -2.9052], [-3.666, -2.9403], [-3.5647, -2.6877]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-4.9142, -3.1811], [-5.5513, -3.9697], [-4.5256, -4.3215], [-4.3546, -4.1098]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-5.7942, -4.1938], [-6.6247, -4.7753], [-5.7364, -5.3972], [-5.5135, -5.2411]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-6.9262, -4.9296], [-7.8799, -5.2735], [-7.1854, -6.1062], [-6.9294, -6.0139]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-8.218, -5.3477], [-9.2272, -5.444], [-8.7613, -6.4231], [-8.4903, -6.3972]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-9.5799, -5.434], [-10.5834, -5.2894], [-10.3617, -6.3508], [-10.0924, -6.3896]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-10.9302, -5.197], [-11.8753, -4.8302], [-11.8982, -5.9142], [-11.6445, -6.0127]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-12.1983, -4.6613], [-13.0425, -4.0999], [-13.2979, -5.1537], [-13.0713, -5.3044]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-13.3267, -3.8637], [-14.0373, -3.1405], [-14.5041, -4.1192], [-14.3133, -4.3133]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-14.271, -2.8483], [-14.825, -1.9992], [-15.4757, -2.8666], [-15.327, -3.0945]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-14.9998, -1.6636], [-15.3829, -0.7249], [-16.1862, -1.4532], [-16.0833, -1.7051]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-15.4935, -0.3587], [-15.699, 0.6341], [-16.6216, 0.0644], [-16.5664, -0.2021]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-15.7428, 1.0177], [-15.7707, 2.0312], [-16.779, 1.6324], [-16.7715, 1.3604]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-15.7476, 2.4201], [-15.6034, 3.4237], [-16.6647, 3.2015], [-16.7034, 2.9321]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-15.5151, 3.8064], [-15.2087, 4.7728], [-16.292, 4.7273], [-16.3743, 4.4679]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-15.0589, 5.1392], [-14.6034, 6.045], [-15.6803, 6.1714], [-15.8026, 5.9283]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-14.397, 6.386], [-13.8082, 7.2113], [-14.853, 7.5012], [-15.0111, 7.2796]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-13.551, 7.5193], [-12.8463, 8.2481], [-13.8365, 8.6898], [-14.0257, 8.4942]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-12.545, 8.5169], [-11.7427, 9.1367], [-12.6591, 9.7164], [-12.8744, 9.55]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-11.4045, 9.3614], [-10.5234, 9.863], [-11.3498, 10.565], [-11.5863, 10.4304]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-10.1555, 10.04], [-9.2145, 10.4173], [-9.9379, 11.225], [-10.1905, 11.1237]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-8.8242, 10.5441], [-7.8416, 10.7939], [-8.4521, 11.69], [-8.7158, 11.6229]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-7.4362, 10.8691], [-6.4297, 10.9906], [-6.92, 11.9577], [-7.1901, 11.9251]], y: [-0.6, 0.6], collide: 1}
      - {kind: poly, points: [[-6.0161, 11.014], [-5.0023, 11.0086], [-5.3678, 12.0295], [-5.6399, 12.0309]], y: [-0.6, 0.6], collide: 1}
  - id: gb
    shape: part
    pos: [8.0, 0, 0]
    density: 7800
    friction: 0.1
    color: "#b9ac90"
    pieces:
      - {kind: poly, points: [[8.0, 0.0], [6.6964, 3.1046], [6.9463, 3.2756]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [6.9463, 3.2756], [7.2162, 3.4277]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [7.2162, 3.4277], [7.5046, 3.5585]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [7.5046, 3.5585], [7.8097, 3.6659]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [7.8097, 3.6659], [8.1299, 3.7481]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [8.1299, 3.7481], [8.463, 3.8032]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [8.463, 3.8032], [8.807, 3.8296]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [8.807, 3.8296], [9.1593, 3.8259]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [9.1593, 3.8259], [9.5176, 3.7907]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [9.5176, 3.7907], [9.8789, 3.7231]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [9.8789, 3.7231], [10.2406, 3.6221]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [10.2406, 3.6221], [10.5995, 3.4871]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [10.5995, 3.4871], [10.9527, 3.3179]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [10.9527, 3.3179], [11.2969, 3.1143]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [11.2969, 3.1143], [11.6289, 2.8765]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [11.6289, 2.8765], [11.9454, 2.6052]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [11.9454, 2.6052], [12.2432, 2.301]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.2432, 2.301], [12.519, 1.9652]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.519, 1.9652], [12.7696, 1.5991]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.7696, 1.5991], [12.9919, 1.2045]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.9919, 1.2045], [13.1829, 0.7834]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.1829, 0.7834], [13.3396, 0.3383]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.3396, 0.3383], [13.4593, -0.1283]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.4593, -0.1283], [13.5396, -0.6133]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.5396, -0.6133], [13.578, -1.1136]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.578, -1.1136], [13.5726, -1.6256]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.5726, -1.6256], [13.5216, -2.1457]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.5216, -2.1457], [13.4234, -2.6699]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.4234, -2.6699], [13.277, -3.194]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.277, -3.194], [13.0816, -3.7138]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [13.0816, -3.7138], [12.8367, -4.2248]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.8367, -4.2248], [12.5424, -4.7224]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.5424, -4.7224], [12.199, -5.2019]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [12.199, -5.2019], [11.8073, -5.6588]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [11.8073, -5.6588], [11.3686, -6.0884]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [11.3686, -6.0884], [10.8846, -6.4859]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [10.8846, -6.4859], [10.3573, -6.8469]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [10.3573, -6.8469], [9.7894, -7.1668]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [9.7894, -7.1668], [9.1838, -7.4414]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [9.1838, -7.4414], [8.5441, -7.6667]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [8.5441, -7.6667], [7.874, -7.8387]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [7.874, -7.8387], [7.1777, -7.9538]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [7.1777, -7.9538], [6.4601, -8.009]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [6.4601, -8.009], [5.726, -8.0013]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [5.726, -8.0013], [4.9809, -7.9281]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [4.9809, -7.9281], [4.2303, -7.7876]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [4.2303, -7.7876], [3.4803, -7.5781]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [3.4803, -7.5781], [2.7369, -7.2986]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [2.7369, -7.2986], [2.0065, -6.9486]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [2.0065, -6.9486], [1.2956, -6.5281]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [1.2956, -6.5281], [0.6109, -6.0378]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [0.6109, -6.0378], [-0.0412, -5.4788]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-0.0412, -5.4788], [-0.6539, -4.853]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-0.6539, -4.853], [-1.2206, -4.1629]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-1.2206, -4.1629], [-1.735, -3.4116]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-1.735, -3.4116], [-2.1907, -2.6027]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-2.1907, -2.6027], [-2.5817, -1.7406]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-2.5817, -1.7406], [-2.9022, -0.8302]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-2.9022, -0.8302], [-3.1468, 0.123]], y: [-0.3, 0.3], collide: 0}
      - {kind: poly, points: [[8.0, 0.0], [-3.1468, 0.123], [-3.3105, 1.1116]], y: [-0.3, 0.3], collide: 0}
      - {kind: disc, center: [8.0, 0], radius: 1.4, y: [-0.9, 0.9], collide: 0, color: "#8f8a80"}   # the hub
      - {kind: disc, center: [9.757, 2.4317], radius: 3.0, y: [0.65, 4.2891], collide: 0, color: "#6f6a60"}   # the balance weight, behind
      - {kind: poly, points: [[6.2427, 2.864], [7.0534, 3.4727], [6.145, 4.0648], [5.9274, 3.9014]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[7.316, 3.6016], [8.2872, 3.8924], [7.6397, 4.7621], [7.379, 4.6841]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[8.5902, 3.9281], [9.6034, 3.8896], [9.2714, 4.9219], [8.9995, 4.9322]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[9.9133, 3.8269], [10.8672, 3.4836], [10.8633, 4.5679], [10.6073, 4.66]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[11.1538, 3.3282], [11.9703, 2.7273], [12.2756, 3.7677], [12.0564, 3.929]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[12.2091, 2.4928], [12.8338, 1.6943], [13.4077, 2.6142], [13.2401, 2.8285]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[13.0069, 1.3988], [13.4076, 0.4674], [14.197, 1.2107], [14.0895, 1.4607]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[13.504, 0.1314], [13.6673, -0.8692], [14.6132, -0.339], [14.5693, -0.0705]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[13.6821, -1.2248], [13.6104, -2.2361], [14.653, -1.9382], [14.6722, -1.6667]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[13.5438, -2.5916], [13.2515, -3.5624], [14.334, -3.5011], [14.4125, -3.2405]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[13.108, -3.9002], [12.6181, -4.7878], [13.6893, -4.9555], [13.8208, -4.7173]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[12.4054, -5.093], [11.7467, -5.8637], [12.7623, -6.2437], [12.9391, -6.0369]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[11.4749, -6.124], [10.6796, -6.7528], [11.6025, -7.322], [11.816, -7.1532]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[10.3599, -6.9592], [9.4617, -7.4293], [10.2627, -8.1601], [10.5038, -8.0339]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[9.1062, -7.5754], [8.1383, -7.8772], [8.7956, -8.7395], [9.0554, -8.6585]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[7.7592, -7.9594], [6.7538, -8.0898], [7.2525, -9.0526], [7.5224, -9.0176]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[6.3629, -8.1068], [5.3498, -8.0679], [5.6814, -9.1003], [5.9533, -9.1107]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[4.9583, -8.0204], [3.9647, -7.8191], [4.1258, -8.8914], [4.3926, -8.9454]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[3.5829, -7.7095], [2.6327, -7.356], [2.625, -8.4402], [2.88, -8.5351]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[2.2697, -7.188], [1.3836, -6.6953], [1.2126, -7.7661], [1.4504, -7.8983]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[1.0474, -6.474], [0.2429, -5.8571], [-0.0828, -6.8914], [0.1331, -7.0569]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-0.0598, -5.5881], [-0.7687, -4.8634], [-1.2378, -5.841], [-1.0475, -6.0355]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-1.0323, -4.553], [-1.6347, -3.7376], [-2.2339, -4.6413], [-2.0722, -4.8601]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-1.8549, -3.3925], [-2.3427, -2.5037], [-3.0575, -3.3191], [-2.9265, -3.5576]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-2.5163, -2.1308], [-2.8842, -1.1861], [-3.6991, -1.9014], [-3.6003, -2.155]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-3.009, -0.7921], [-3.2542, 0.1916], [-4.1532, -0.4146], [-4.0874, -0.6787]], y: [-0.6, 0.6], collide: 2}
      - {kind: poly, points: [[-3.3291, 0.5999], [-3.451, 1.6064], [-4.4179, 1.1158], [-4.3852, 0.8456]], y: [-0.6, 0.6], collide: 2}
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    density: 7800
    color: "#cfc6b4"
    pieces:
      - {kind: disc, center: [-8.0, 0], radius: 0.6, y: [0.9, 4.6], collide: 0, color: "#6f6a60"}   # the shaft of the driver
      - {kind: disc, center: [8.0, 0], radius: 0.6, y: [0.9, 2.6], collide: 0, color: "#6f6a60"}   # and of the driven
      - {kind: poly, points: [[-10.0, -1.6], [10.0, -1.6], [10.0, 1.6], [-10.0, 1.6]], y: [4.6, 5.4], collide: 0}   # the frame behind
joints:
  - {id: j_a, type: hinge, body: ga, axis: [0, -1, 0], damping: 0.001}   # the one driven joint: the driver; + : counter-clockwise
  - {id: j_b, type: hinge, body: gb, axis: [0, -1, 0], damping: 0.01}   # the driven scroll; turns clockwise
contact: {solref: [0.002, 1.0], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_a, kind: velocity, rpm: 10.0, kv: 6, max_torque: 8}
checks:
  - {type: ratio, out: j_b, in: j_a, expect: -0.9230, tol: 0.0369, settle_s: 0.6, window_s: 3.6}   # mean of -r1/r2 over the window
  - {type: ratio_range, out: j_b, in: j_a, min: -2.459, max: -0.344, min_swing: 0.922, settle_s: 0.6, window_s: 3.6, slices: 12}   # the speed grows
  - {type: monotonic, joint: j_b, direction: -1, max_back: 0.02, settle_s: 0.3, window_s: 4.2}
  - {type: penetration, max: 0.001, settle_s: 0.5}
camera: {target: [0, 0, 0], position: [0, -62, 1.5], fov: 34}
display:
  output: j_b
  labels: {j_a: "Driver scroll (left)", j_b: "Driven scroll (right)"}

