name = "littletechbird/dirac-belt" version = "1.0.0" runtime = "steve" license = "MIT" summary = "Dirac belt (belt trick): a cube tied to anchor pads by ribbons, posed at any moment of a 720 degree untangle." description = """Dirac's belt trick as a solid model. A cube is tied by two (or six) elastic ribbons to anchor pads that \ never move. Turning the cube 360 degrees leaves the ribbons twisted in a way no sliding can undo; after 720 degrees \ they can be untangled without turning the cube or the pads. It is the topology behind spin-1/2 particles, which \ need two full turns to come back to themselves. `time` picks the moment in a 37.5 s sequence: rest, a 360 degree turn, Hanson's 360 loop, a second turn, the 720 \ untangle, four more ribbons grow out, and a six-ribbon finale in which the cube turns another 720 degrees. Each sphere around the cube turns as one rigid \ piece by an angle set only by its distance from the centre, so the ribbons never pass through each other or the \ cube at any moment, and each keeps its exact volume. Ribbons are B-spline solids fitted through the exact mapped \ points. Cube at the origin, ribbon +z up, the cube's +x face marked red. Units mm.""" tags = ["physics", "topology", "dirac-belt", "belt-trick", "spinor", "quaternion", "education", "animation"] [parameters.time] type = "number" default = 24.0 min = 0 max = 37.5 step = 0.01 unit = "s" label = "Moment in the motion" description = "0-3 rest, 3-9 first 360 degree turn, 9-15 Hanson 360 loop, 15-21 second turn, 21-28 the 720 untangle, 28-29.5 side ribbons grow, 29.5-37.5 six-ribbon finale. Same timeline as the video, frame = time x 60." [parameters.ribbons] type = "choice" default = "as in the video" choices = ["as in the video", "1", "2", "6"] label = "Ribbons" description = "As in the video: the two vertical ribbons, then all six from 28 s. Or a fixed count: 1 (+z), 2 (+z, -z) or 6 (all faces) at any moment." [parameters.cube_size] type = "number" default = 40 min = 5 max = 1000 unit = "mm" label = "Cube size" [parameters.ribbon_width] type = "number" default = 18 min = 0.5 max = 600 unit = "mm" label = "Ribbon width" description = "At most 0.5 x cube size." [parameters.ribbon_thickness] type = "number" default = 0.8 min = 0.01 max = 50 unit = "mm" label = "Ribbon thickness" description = "At most 0.02 x cube size (as in the video), and at most a quarter of the ribbon width." [parameters.ribbon_length] type = "number" default = 108 min = 12.5 max = 10000 unit = "mm" label = "Ribbon length" description = "From the cube face to the anchor pad; at least 2.5 x cube size."