# No. 203 (Brown 1868): "A regular vibrating movement of the curved slotted arm gives a variable vibration to the straight arm."
#
# Model (cm, after the plate; drawing plane x-z): the curved arm turns on a pivot at the origin; its slot (a smooth curve through the plate's points) runs from
# low on the left up and over to the upper right. The straight arm is pivoted 17 cm to the right and 8.75 up; the pin at its free end, 14.45 from its
# pivot, works in the slot (pin radius 0.45, clearance 0.04). Only the curved arm is driven: rocked regularly by hand, +-0.32 rad at 0.4 Hz about the drawn
# position. Along the slot its slant to the curved arm's radius changes, so the straight arm's rate to the curved arm's runs from -1.13 to
# -0.18 (rolling kinematics), and its swing is lopsided: -0.176 rad one way and +0.073 the other. Gravity is on; the straight arm's
# weight rests the pin on the slot's lower side. Generator: opencode-runs/batch11/gen203.py.
number: 203
slug: curved-slotted-arm
name: A curved slotted arm vibrating a straight arm
brown: "A regular vibrating movement of the curved slotted arm gives a variable vibration to the straight arm."
units: cm
sim:
  timestep: 0.0002
  integrator: implicitfast
  iterations: 100
  solver: CG
  multiccd: true
  duration_s: 10.0
bodies:
  - id: curved
    shape: part
    pos: [0, 0, 0]
    density: 2700
    friction: 0.1
    color: "#c9b88f"
    pieces:
      - {kind: poly, points: [[-3.3074, 1.243], [-3.2785, 1.4964], [-4.0841, 1.5811], [-4.1115, 1.3405]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.3346, 1.1251], [-1.5305, 1.0276], [-1.4983, 1.3093], [-2.3039, 1.394]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.2785, 1.4964], [-3.2533, 1.7548], [-4.06, 1.8282], [-4.0841, 1.5811]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.3039, 1.394], [-1.4983, 1.3093], [-1.4707, 1.5927], [-2.2773, 1.666]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.2533, 1.7548], [-3.2308, 2.0183], [-4.0381, 2.0837], [-4.06, 1.8282]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.2773, 1.666], [-1.4707, 1.5927], [-1.4466, 1.8736], [-2.254, 1.9391]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.2308, 2.0183], [-3.21, 2.2857], [-4.0177, 2.3465], [-4.0381, 2.0837]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.254, 1.9391], [-1.4466, 1.8736], [-1.425, 2.1514], [-2.2327, 2.2122]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.21, 2.2857], [-3.19, 2.556], [-3.9978, 2.6153], [-4.0177, 2.3465]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.2327, 2.2122], [-1.425, 2.1514], [-1.4048, 2.4252], [-2.2126, 2.4844]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.19, 2.556], [-3.1699, 2.8283], [-3.9776, 2.889], [-3.9978, 2.6153]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.2126, 2.4844], [-1.4048, 2.4252], [-1.3849, 2.694], [-2.1926, 2.7548]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.1699, 2.8283], [-3.1486, 3.1014], [-3.956, 3.1668], [-3.9776, 2.889]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.1926, 2.7548], [-1.3849, 2.694], [-1.3645, 2.9568], [-2.1718, 3.0222]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.1486, 3.1014], [-3.1253, 3.3744], [-3.9319, 3.4478], [-3.956, 3.1668]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.1718, 3.0222], [-1.3645, 2.9568], [-1.3426, 3.2123], [-2.1493, 3.2857]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.1253, 3.3744], [-3.0987, 3.6465], [-3.9043, 3.7312], [-3.9319, 3.4478]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.1493, 3.2857], [-1.3426, 3.2123], [-1.3185, 3.4594], [-2.1241, 3.544]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.0987, 3.6465], [-3.0679, 3.9167], [-3.8717, 4.0163], [-3.9043, 3.7312]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.1241, 3.544], [-1.3185, 3.4594], [-1.2915, 3.6966], [-2.0953, 3.7962]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.0679, 3.9167], [-3.0317, 4.1841], [-3.833, 4.3026], [-3.8717, 4.0163]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.0953, 3.7962], [-1.2915, 3.6966], [-1.2609, 3.9225], [-2.0622, 4.0409]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-3.0317, 4.1841], [-2.9889, 4.4481], [-3.7865, 4.5896], [-3.833, 4.3026]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.0622, 4.0409], [-1.2609, 3.9225], [-1.2264, 4.1355], [-2.024, 4.2769]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.9889, 4.4481], [-2.9384, 4.7078], [-3.7305, 4.877], [-3.7865, 4.5896]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.024, 4.2769], [-1.2264, 4.1355], [-1.1878, 4.3339], [-1.98, 4.5031]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.9384, 4.7078], [-2.8786, 4.9624], [-3.663, 5.1644], [-3.7305, 4.877]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.98, 4.5031], [-1.1878, 4.3339], [-1.1451, 4.5161], [-1.9295, 4.718]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.8786, 4.9624], [-2.8084, 5.2104], [-3.5824, 5.4493], [-3.663, 5.1644]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.9295, 4.718], [-1.1451, 4.5161], [-1.098, 4.6825], [-1.872, 4.9214]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.8084, 5.2104], [-2.733, 5.4428], [-3.5002, 5.7026], [-3.5824, 5.4493]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.872, 4.9214], [-1.098, 4.6825], [-1.0376, 4.8686], [-1.8048, 5.1284]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.733, 5.4428], [-2.6521, 5.6718], [-3.4123, 5.9515], [-3.5002, 5.7026]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.8048, 5.1284], [-1.0376, 4.8686], [-0.9722, 5.0538], [-1.7324, 5.3334]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.6521, 5.6718], [-2.5656, 5.8978], [-3.318, 6.1976], [-3.4123, 5.9515]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.7324, 5.3334], [-0.9722, 5.0538], [-0.9027, 5.2352], [-1.6552, 5.535]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.5656, 5.8978], [-2.4734, 6.1202], [-3.2173, 6.4407], [-3.318, 6.1976]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.6552, 5.535], [-0.9027, 5.2352], [-0.8294, 5.4121], [-1.5734, 5.7325]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.4734, 6.1202], [-2.3757, 6.3385], [-3.1101, 6.6801], [-3.2173, 6.4407]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.5734, 5.7325], [-0.8294, 5.4121], [-0.7527, 5.5836], [-1.4871, 5.9252]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.3757, 6.3385], [-2.2724, 6.5522], [-2.9963, 6.9156], [-3.1101, 6.6801]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.4871, 5.9252], [-0.7527, 5.5836], [-0.6727, 5.749], [-1.3966, 6.1124]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.2724, 6.5522], [-2.1637, 6.7606], [-2.8758, 7.1467], [-2.9963, 6.9156]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.3966, 6.1124], [-0.6727, 5.749], [-0.5901, 5.9074], [-1.3022, 6.2935]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.1637, 6.7606], [-2.0494, 6.9633], [-2.7483, 7.3729], [-2.8758, 7.1467]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.3022, 6.2935], [-0.5901, 5.9074], [-0.5052, 6.0581], [-1.204, 6.4677]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-2.0494, 6.9633], [-1.9297, 7.1597], [-2.6135, 7.5938], [-2.7483, 7.3729]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.204, 6.4677], [-0.5052, 6.0581], [-0.4184, 6.2004], [-1.1023, 6.6345]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.9297, 7.1597], [-1.8043, 7.3492], [-2.4713, 7.8089], [-2.6135, 7.5938]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.1023, 6.6345], [-0.4184, 6.2004], [-0.3305, 6.3333], [-0.9974, 6.793]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.8043, 7.3492], [-1.6733, 7.5313], [-2.321, 8.0178], [-2.4713, 7.8089]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.9974, 6.793], [-0.3305, 6.3333], [-0.2421, 6.4563], [-0.8897, 6.9428]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.6733, 7.5313], [-1.5366, 7.7055], [-2.1623, 8.2199], [-2.321, 8.0178]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.8897, 6.9428], [-0.2421, 6.4563], [-0.1539, 6.5687], [-0.7796, 7.0831]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.5366, 7.7055], [-1.3939, 7.871], [-1.9944, 8.4145], [-2.1623, 8.2199]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.7796, 7.0831], [-0.1539, 6.5687], [-0.0668, 6.6697], [-0.6673, 7.2133]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.3939, 7.871], [-1.2451, 8.0272], [-1.8167, 8.6011], [-1.9944, 8.4145]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.6673, 7.2133], [-0.0668, 6.6697], [0.0182, 6.7591], [-0.5534, 7.3329]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.2451, 8.0272], [-1.0893, 8.174], [-1.6268, 8.78], [-1.8167, 8.6011]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.5534, 7.3329], [0.0182, 6.7591], [0.0985, 6.8349], [-0.439, 7.4409]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-1.0893, 8.174], [-0.9173, 8.3144], [-1.4028, 8.9628], [-1.6268, 8.78]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.439, 7.4409], [0.0985, 6.8349], [0.1557, 6.8817], [-0.3298, 7.53]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.9173, 8.3144], [-0.738, 8.4378], [-1.1709, 9.1224], [-1.4028, 8.9628]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.3298, 7.53], [0.1557, 6.8817], [0.2185, 6.9248], [-0.2143, 7.6095]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.738, 8.4378], [-0.554, 8.5449], [-0.9365, 9.2589], [-1.1709, 9.1224]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.2143, 7.6095], [0.2185, 6.9248], [0.2913, 6.9671], [-0.0912, 7.6811]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.554, 8.5449], [-0.3669, 8.6375], [-0.703, 9.3744], [-0.9365, 9.2589]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.0912, 7.6811], [0.2913, 6.9671], [0.3759, 7.0089], [0.0398, 7.7458]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.3669, 8.6375], [-0.1779, 8.7173], [-0.4727, 9.4717], [-0.703, 9.3744]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.0398, 7.7458], [0.3759, 7.0089], [0.4736, 7.05], [0.1788, 7.8045]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[-0.1779, 8.7173], [0.0118, 8.7862], [-0.2475, 9.5536], [-0.4727, 9.4717]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.1788, 7.8045], [0.4736, 7.05], [0.5848, 7.0904], [0.3255, 7.8578]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.0118, 8.7862], [0.2014, 8.8461], [-0.0285, 9.6228], [-0.2475, 9.5536]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.3255, 7.8578], [0.5848, 7.0904], [0.7095, 7.1297], [0.4796, 7.9064]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.2014, 8.8461], [0.3902, 8.8988], [0.1834, 9.682], [-0.0285, 9.6228]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.4796, 7.9064], [0.7095, 7.1297], [0.8472, 7.1681], [0.6404, 7.9513]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.3902, 8.8988], [0.5776, 8.946], [0.3876, 9.7334], [0.1834, 9.682]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.6404, 7.9513], [0.8472, 7.1681], [0.9973, 7.2059], [0.8074, 7.9933]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.5776, 8.946], [0.7628, 8.9892], [0.5835, 9.7791], [0.3876, 9.7334]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.8074, 7.9933], [0.9973, 7.2059], [1.159, 7.2436], [0.9797, 8.0335]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.7628, 8.9892], [0.9454, 9.03], [0.7706, 9.8209], [0.5835, 9.7791]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.9797, 8.0335], [1.159, 7.2436], [1.3317, 7.2822], [1.1569, 8.0731]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[0.9454, 9.03], [1.1247, 9.0697], [0.9484, 9.8602], [0.7706, 9.8209]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.1569, 8.0731], [1.3317, 7.2822], [1.5144, 7.3226], [1.3381, 8.1132]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.1247, 9.0697], [1.3001, 9.1095], [1.1161, 9.8984], [0.9484, 9.8602]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.3381, 8.1132], [1.5144, 7.3226], [1.7067, 7.3663], [1.5227, 8.1552]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.3001, 9.1095], [1.471, 9.1508], [1.2733, 9.9363], [1.1161, 9.8984]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.5227, 8.1552], [1.7067, 7.3663], [1.9078, 7.415], [1.7101, 8.2005]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.471, 9.1508], [1.6384, 9.1951], [1.4239, 9.9762], [1.2733, 9.9363]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.7101, 8.2005], [1.9078, 7.415], [2.1125, 7.469], [1.8979, 8.2501]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.6384, 9.1951], [1.8289, 9.2451], [1.6341, 10.0313], [1.4239, 9.9762]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.8979, 8.2501], [2.1125, 7.469], [2.2593, 7.5076], [2.0645, 8.2939]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[1.8289, 9.2451], [2.0223, 9.2905], [1.8466, 10.0812], [1.6341, 10.0313]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.0645, 8.2939], [2.2593, 7.5076], [2.4107, 7.5431], [2.235, 8.3338]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.0223, 9.2905], [2.2164, 9.3315], [2.0561, 10.1255], [1.8466, 10.0812]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.235, 8.3338], [2.4107, 7.5431], [2.5706, 7.5769], [2.4104, 8.3709]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.2164, 9.3315], [2.4107, 9.3692], [2.2624, 10.1655], [2.0561, 10.1255]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.4104, 8.3709], [2.5706, 7.5769], [2.7383, 7.6094], [2.59, 8.4057]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.4107, 9.3692], [2.6046, 9.4041], [2.4652, 10.202], [2.2624, 10.1655]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.59, 8.4057], [2.7383, 7.6094], [2.9128, 7.6408], [2.7733, 8.4387]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.6046, 9.4041], [2.7976, 9.437], [2.6638, 10.2359], [2.4652, 10.202]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.7733, 8.4387], [2.9128, 7.6408], [3.0935, 7.6717], [2.9596, 8.4705]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.7976, 9.437], [2.9892, 9.4688], [2.8578, 10.268], [2.6638, 10.2359]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.9596, 8.4705], [3.0935, 7.6717], [3.2796, 7.7025], [3.1482, 8.5018]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[2.9892, 9.4688], [3.1788, 9.5], [3.0467, 10.2991], [2.8578, 10.268]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.1482, 8.5018], [3.2796, 7.7025], [3.4706, 7.7339], [3.3386, 8.5331]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.1788, 9.5], [3.3657, 9.5312], [3.2299, 10.3297], [3.0467, 10.2991]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.3386, 8.5331], [3.4706, 7.7339], [3.666, 7.7666], [3.5301, 8.5651]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.3657, 9.5312], [3.5494, 9.5632], [3.4066, 10.3605], [3.2299, 10.3297]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.5301, 8.5651], [3.666, 7.7666], [3.8651, 7.8013], [3.7222, 8.5986]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.5494, 9.5632], [3.7292, 9.5966], [3.576, 10.3919], [3.4066, 10.3605]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.7222, 8.5986], [3.8651, 7.8013], [4.0676, 7.8389], [3.9145, 8.6342]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.7292, 9.5966], [3.9043, 9.6318], [3.7374, 10.4244], [3.576, 10.3919]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.9145, 8.6342], [4.0676, 7.8389], [4.2732, 7.8802], [4.1063, 8.6728]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[3.9043, 9.6318], [4.0742, 9.6694], [3.8899, 10.4582], [3.7374, 10.4244]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.1063, 8.6728], [4.2732, 7.8802], [4.4815, 7.9264], [4.2972, 8.7151]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.0742, 9.6694], [4.2381, 9.71], [4.0326, 10.4935], [3.8899, 10.4582]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.2972, 8.7151], [4.4815, 7.9264], [4.6923, 7.9785], [4.4868, 8.762]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.2381, 9.71], [4.3956, 9.7539], [4.1653, 10.5305], [4.0326, 10.4935]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.4868, 8.762], [4.6923, 7.9785], [4.9044, 8.0378], [4.6742, 8.8143]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.3956, 9.7539], [4.5523, 9.8026], [4.3029, 10.5732], [4.1653, 10.5305]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.6742, 8.8143], [4.9044, 8.0378], [5.1033, 8.0995], [4.854, 8.8702]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.5523, 9.8026], [4.7068, 9.8545], [4.4404, 10.6194], [4.3029, 10.5732]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.854, 8.8702], [5.1033, 8.0995], [5.2954, 8.1641], [5.0291, 8.929]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.7068, 9.8545], [4.8593, 9.9094], [4.5777, 10.6688], [4.4404, 10.6194]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.0291, 8.929], [5.2954, 8.1641], [5.4817, 8.231], [5.2, 8.9905]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[4.8593, 9.9094], [5.0103, 9.9669], [4.7153, 10.7213], [4.5777, 10.6688]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.2, 8.9905], [5.4817, 8.231], [5.6622, 8.2998], [5.3672, 9.0542]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.0103, 9.9669], [5.1601, 10.0269], [4.8537, 10.7767], [4.7153, 10.7213]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.3672, 9.0542], [5.6622, 8.2998], [5.8373, 8.3699], [5.5309, 9.1197]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.1601, 10.0269], [5.3093, 10.089], [4.9934, 10.8348], [4.8537, 10.7767]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.5309, 9.1197], [5.8373, 8.3699], [6.0073, 8.4407], [5.6914, 9.1865]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.3093, 10.089], [5.4582, 10.1529], [5.1349, 10.8956], [4.9934, 10.8348]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.6914, 9.1865], [6.0073, 8.4407], [6.1725, 8.5116], [5.8492, 9.2543]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.4582, 10.1529], [5.6071, 10.2184], [5.2786, 10.9588], [5.1349, 10.8956]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.8492, 9.2543], [6.1725, 8.5116], [6.3331, 8.5823], [6.0046, 9.3227]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.6071, 10.2184], [5.7566, 10.2852], [5.4249, 11.0242], [5.2786, 10.9588]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.0046, 9.3227], [6.3331, 8.5823], [6.4896, 8.6522], [6.1579, 9.3911]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.7566, 10.2852], [5.907, 10.3529], [5.5743, 11.0914], [5.4249, 11.0242]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.1579, 9.3911], [6.4896, 8.6522], [6.6424, 8.7209], [6.3096, 9.4594]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[5.907, 10.3529], [6.0587, 10.4212], [5.727, 11.1601], [5.5743, 11.0914]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.3096, 9.4594], [6.6424, 8.7209], [6.7917, 8.7881], [6.46, 9.5271]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.0587, 10.4212], [6.212, 10.4896], [5.8835, 11.23], [5.727, 11.1601]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.46, 9.5271], [6.7917, 8.7881], [6.938, 8.8535], [6.6095, 9.5939]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.212, 10.4896], [6.3674, 10.558], [6.0442, 11.3007], [5.8835, 11.23]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.6095, 9.5939], [6.938, 8.8535], [7.0817, 8.9167], [6.7585, 9.6594]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.3674, 10.558], [6.5252, 10.6257], [6.2094, 11.3716], [6.0442, 11.3007]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.7585, 9.6594], [7.0817, 8.9167], [7.2232, 8.9775], [6.9074, 9.7233]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.5252, 10.6257], [6.685, 10.6923], [6.3772, 11.4415], [6.2094, 11.3716]], y: [-0.4, 0.4], collide: 2}
      - {kind: poly, points: [[6.9074, 9.7233], [7.2232, 8.9775], [7.365, 9.0365], [7.0573, 9.7858]], y: [-0.4, 0.4], collide: 2}
      - {kind: disc, center: [-2.821, 1.184], radius: 1.3, y: [0.0, 0.4], collide: 0}
      - {kind: disc, center: [6.8711, 10.239], radius: 1.3, y: [0.0, 0.4], collide: 0}
      - {kind: poly, points: [[-4.0951, 1.4423], [-1.5469, 0.9258], [1.4489, -0.9059], [-0.3377, -1.6661], [-1.8065, -0.8582]], y: [-0.4, 0.4], collide: 0}   # the web to the hub
      - {kind: disc, center: [0, 0], radius: 1.7, y: [-0.4, 0.4], collide: 0}   # the hub
  - id: straight
    shape: part
    pos: [17.0, 0, 8.75]
    density: 2700
    friction: 0.1
    color: "#a39a86"
    pieces:
      - {kind: poly, points: [[2.5466, 8.446], [17.0, 7.95], [17.0, 9.55], [2.5466, 9.346]], y: [-1.6, -0.9], collide: 0}   # the arm, in front
      - {kind: disc, center: [17.0, 8.75], radius: 1.4, y: [-1.6, -0.9], collide: 0}
      - {kind: disc, center: [2.5466, 8.896], radius: 0.9, y: [-1.6, -0.9], collide: 0}
      - {kind: disc, center: [2.5466, 8.896], radius: 0.45, y: [-0.9, 0.6], collide: 1, color: "#6f6a60"}   # the pin in the slot
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    density: 7800
    color: "#cfc6b4"
    pieces:
      - {kind: disc, center: [0, 0], radius: 0.7, y: [-0.8, 2.0], collide: 0, color: "#6f6a60"}   # the curved arm's pivot
      - {kind: disc, center: [17.0, 8.75], radius: 0.7, y: [-2.0, 2.0], collide: 0, color: "#6f6a60"}   # the straight arm's
      - {kind: poly, points: [[-1.4, -5], [1.4, -5], [0.9, 0], [-0.9, 0]], y: [0.6, 2.0], collide: 0}   # standards
      - {kind: poly, points: [[15.6, -5], [18.4, -5], [17.9, 8.75], [16.1, 8.75]], y: [0.6, 2.0], collide: 0}
      - {kind: poly, points: [[-7, -6.5], [21.0, -6.5], [21.0, -5], [-7, -5]], y: [-2.0, 2.0], collide: 0, color: "#9c9282"}   # the bench
joints:
  - {id: j_curved, type: hinge, body: curved, axis: [0, -1, 0], damping: 0.01}   # the one driven joint; +: counter-clockwise
  - {id: j_straight, type: hinge, body: straight, axis: [0, -1, 0], damping: 0.01, range: [-0.3, 0.2]}   # stops, never reached in work: they hold the arm when the pin is out
contact: {solref: [0.002, 1.0], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_curved, kind: velocity, rpm: 0, swing: {amplitude: 0.32, hz: 0.4}, kv: 20, max_torque: 40}
checks:
  - {type: position, joint: j_straight, min: -0.196, max: 0.093, settle_s: 0.2, window_s: 9.5}
  - {type: amplitude, joint: j_straight, min: 0.0998, max: 0.1497, settle_s: 0.5, window_s: 9}
  - {type: ratio_range, out: j_straight, in: j_curved, min: -1.408, max: -0.137, min_swing: 0.472, settle_s: 0.5, window_s: 5, slices: 16}
  - {type: penetration, max: 0.001, settle_s: 0.5}
camera: {target: [7, 0, 3], position: [7, -75, 4], fov: 34}
display:
  output: j_straight
  labels: {j_curved: "Curved slotted arm (driver)", j_straight: "Straight arm"}
  proof: {label: "Pin out of the slot", sub: "the curved arm rocks alone: the straight arm hangs"}

