@maniclang/workbench 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. package/CONTRIBUTING.md +40 -0
  2. package/README.md +155 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/abap-CRCWOmpq.js +1 -0
  63. package/dist/client/assets/apex-DnsZk_dE.js +1 -0
  64. package/dist/client/assets/azcli-1IWB1ccx.js +1 -0
  65. package/dist/client/assets/bat-DPkNLes8.js +1 -0
  66. package/dist/client/assets/bicep-Corcdgou.js +2 -0
  67. package/dist/client/assets/cameligo-CGrWLZr3.js +1 -0
  68. package/dist/client/assets/clojure-D9WOWImG.js +1 -0
  69. package/dist/client/assets/codicon-CgENjH2v.ttf +0 -0
  70. package/dist/client/assets/coffee-B7EJu28W.js +1 -0
  71. package/dist/client/assets/cpp-SEyurbux.js +1 -0
  72. package/dist/client/assets/csharp-BoL64M5l.js +1 -0
  73. package/dist/client/assets/csp-C46ZqvIl.js +1 -0
  74. package/dist/client/assets/css-DQU6DXDx.js +3 -0
  75. package/dist/client/assets/cssMode-CtRONlr8.js +4 -0
  76. package/dist/client/assets/cypher-D84EuPTj.js +1 -0
  77. package/dist/client/assets/dart-D8lhlL1r.js +1 -0
  78. package/dist/client/assets/dockerfile-DLk6rpji.js +1 -0
  79. package/dist/client/assets/ecl-BO6FnfXk.js +1 -0
  80. package/dist/client/assets/editor.worker-CZyr7Ur9.js +26 -0
  81. package/dist/client/assets/elixir-BRjLKONM.js +1 -0
  82. package/dist/client/assets/flow9-Cac8vKd7.js +1 -0
  83. package/dist/client/assets/freemarker2-BTSNJUl8.js +3 -0
  84. package/dist/client/assets/fsharp-fd1GTHhf.js +1 -0
  85. package/dist/client/assets/go-O9LJTZXk.js +1 -0
  86. package/dist/client/assets/graphql-LQdxqEYJ.js +1 -0
  87. package/dist/client/assets/handlebars-qkUBjVg6.js +1 -0
  88. package/dist/client/assets/hcl-DxDQ3s82.js +1 -0
  89. package/dist/client/assets/html-pguqE00h.js +1 -0
  90. package/dist/client/assets/htmlMode-BCCLuk2F.js +4 -0
  91. package/dist/client/assets/index-BFrMLHHu.css +1 -0
  92. package/dist/client/assets/index-CdBC-xgi.js +1250 -0
  93. package/dist/client/assets/ini-BvajGCUy.js +1 -0
  94. package/dist/client/assets/java-SYsfObOQ.js +1 -0
  95. package/dist/client/assets/javascript-ciDUXdez.js +1 -0
  96. package/dist/client/assets/jsonMode-BmkXC0tI.js +10 -0
  97. package/dist/client/assets/julia-DQXNmw_w.js +1 -0
  98. package/dist/client/assets/kotlin-qQ0MG-9I.js +1 -0
  99. package/dist/client/assets/less-GGFNNJHn.js +2 -0
  100. package/dist/client/assets/lexon-Canl7DCW.js +1 -0
  101. package/dist/client/assets/liquid-CwE4UIwf.js +1 -0
  102. package/dist/client/assets/lua-D28Ae8-K.js +1 -0
  103. package/dist/client/assets/m3-DPitgjJI.js +1 -0
  104. package/dist/client/assets/markdown-B811l8j2.js +1 -0
  105. package/dist/client/assets/mdx-K_9Emnjy.js +1 -0
  106. package/dist/client/assets/mips-CdjsipkG.js +1 -0
  107. package/dist/client/assets/msdax-CYqgjx_P.js +1 -0
  108. package/dist/client/assets/mysql-BHd6q0vd.js +1 -0
  109. package/dist/client/assets/objective-c-B1aVtJYH.js +1 -0
  110. package/dist/client/assets/pascal-BhNW15KB.js +1 -0
  111. package/dist/client/assets/pascaligo-5jv8CcQD.js +1 -0
  112. package/dist/client/assets/perl-DlYyT36c.js +1 -0
  113. package/dist/client/assets/pgsql-Dy0bjov7.js +1 -0
  114. package/dist/client/assets/php-120yhfDK.js +1 -0
  115. package/dist/client/assets/pla-CjnFlu4u.js +1 -0
  116. package/dist/client/assets/postiats-CQpG440k.js +1 -0
  117. package/dist/client/assets/powerquery-DdJtto1Z.js +1 -0
  118. package/dist/client/assets/powershell-Bu_VLpJB.js +1 -0
  119. package/dist/client/assets/protobuf-IBS6jZEB.js +2 -0
  120. package/dist/client/assets/pug-kFxLfcjb.js +1 -0
  121. package/dist/client/assets/python-BzIc0EVe.js +1 -0
  122. package/dist/client/assets/qsharp-q7JyzKFN.js +1 -0
  123. package/dist/client/assets/r-BIFz-_sK.js +1 -0
  124. package/dist/client/assets/razor-lXZl6dtu.js +1 -0
  125. package/dist/client/assets/redis-CHOsPHWR.js +1 -0
  126. package/dist/client/assets/redshift-CBifECDb.js +1 -0
  127. package/dist/client/assets/restructuredtext-CghPJEOS.js +1 -0
  128. package/dist/client/assets/ruby-CYWGW-b1.js +1 -0
  129. package/dist/client/assets/rust-DMDD0SHb.js +1 -0
  130. package/dist/client/assets/sb-BYAiYHFx.js +1 -0
  131. package/dist/client/assets/scala-Bqvq8jcR.js +1 -0
  132. package/dist/client/assets/scheme-Dhb-2j9p.js +1 -0
  133. package/dist/client/assets/scss-CTwUZ5N7.js +3 -0
  134. package/dist/client/assets/shell-CsDZo4DB.js +1 -0
  135. package/dist/client/assets/solidity-CME5AdoB.js +1 -0
  136. package/dist/client/assets/sophia-RYC1BQQz.js +1 -0
  137. package/dist/client/assets/sparql-KEyrF7De.js +1 -0
  138. package/dist/client/assets/sql-BdTr02Mf.js +1 -0
  139. package/dist/client/assets/st-C7iG7M4S.js +1 -0
  140. package/dist/client/assets/swift-D7IUmUK8.js +1 -0
  141. package/dist/client/assets/systemverilog-DgMryOEJ.js +1 -0
  142. package/dist/client/assets/tcl-PloMZuKG.js +1 -0
  143. package/dist/client/assets/tsMode-BAXmgo_t.js +11 -0
  144. package/dist/client/assets/twig-BfRIq3la.js +1 -0
  145. package/dist/client/assets/typescript-Cdf8nS1n.js +1 -0
  146. package/dist/client/assets/typespec-CzxlYoT_.js +1 -0
  147. package/dist/client/assets/vb-BwAE3J76.js +1 -0
  148. package/dist/client/assets/wgsl-B_1kOXbF.js +298 -0
  149. package/dist/client/assets/xml-DGyPgYnj.js +1 -0
  150. package/dist/client/assets/yaml-Dqv3HtbL.js +1 -0
  151. package/dist/client/index.html +14 -0
  152. package/dist/client/manic-logo.png +0 -0
  153. package/dist/client/wasm/manic_lang.d.ts +74 -0
  154. package/dist/client/wasm/manic_lang.js +302 -0
  155. package/dist/client/wasm/manic_lang_bg.wasm +0 -0
  156. package/dist/client/wasm/manic_lang_bg.wasm.d.ts +13 -0
  157. package/dist/server/agentProtocol.d.ts +131 -0
  158. package/dist/server/agentProtocol.js +21 -0
  159. package/dist/server/agentProtocol.js.map +1 -0
  160. package/dist/server/agentRuns.d.ts +46 -0
  161. package/dist/server/agentRuns.js +138 -0
  162. package/dist/server/agentRuns.js.map +1 -0
  163. package/dist/server/agentThreads.d.ts +20 -0
  164. package/dist/server/agentThreads.js +205 -0
  165. package/dist/server/agentThreads.js.map +1 -0
  166. package/dist/server/aiSecrets.d.ts +21 -0
  167. package/dist/server/aiSecrets.js +68 -0
  168. package/dist/server/aiSecrets.js.map +1 -0
  169. package/dist/server/app.d.ts +34 -0
  170. package/dist/server/app.js +804 -0
  171. package/dist/server/app.js.map +1 -0
  172. package/dist/server/assets.d.ts +34 -0
  173. package/dist/server/assets.js +659 -0
  174. package/dist/server/assets.js.map +1 -0
  175. package/dist/server/candidateFix.d.ts +28 -0
  176. package/dist/server/candidateFix.js +111 -0
  177. package/dist/server/candidateFix.js.map +1 -0
  178. package/dist/server/cli.d.ts +2 -0
  179. package/dist/server/cli.js +118 -0
  180. package/dist/server/cli.js.map +1 -0
  181. package/dist/server/diagnostics.d.ts +13 -0
  182. package/dist/server/diagnostics.js +73 -0
  183. package/dist/server/diagnostics.js.map +1 -0
  184. package/dist/server/engineCheck.d.ts +7 -0
  185. package/dist/server/engineCheck.js +60 -0
  186. package/dist/server/engineCheck.js.map +1 -0
  187. package/dist/server/engineInstall.d.ts +34 -0
  188. package/dist/server/engineInstall.js +228 -0
  189. package/dist/server/engineInstall.js.map +1 -0
  190. package/dist/server/enginePaths.d.ts +3 -0
  191. package/dist/server/enginePaths.js +76 -0
  192. package/dist/server/enginePaths.js.map +1 -0
  193. package/dist/server/folderPicker.d.ts +1 -0
  194. package/dist/server/folderPicker.js +54 -0
  195. package/dist/server/folderPicker.js.map +1 -0
  196. package/dist/server/manicAgent.d.ts +75 -0
  197. package/dist/server/manicAgent.js +476 -0
  198. package/dist/server/manicAgent.js.map +1 -0
  199. package/dist/server/manicEnv.d.ts +18 -0
  200. package/dist/server/manicEnv.js +64 -0
  201. package/dist/server/manicEnv.js.map +1 -0
  202. package/dist/server/promptStore.d.ts +11 -0
  203. package/dist/server/promptStore.js +85 -0
  204. package/dist/server/promptStore.js.map +1 -0
  205. package/dist/server/renderJobs.d.ts +54 -0
  206. package/dist/server/renderJobs.js +290 -0
  207. package/dist/server/renderJobs.js.map +1 -0
  208. package/dist/server/settings.d.ts +40 -0
  209. package/dist/server/settings.js +262 -0
  210. package/dist/server/settings.js.map +1 -0
  211. package/dist/server/smartDraw.d.ts +7 -0
  212. package/dist/server/smartDraw.js +88 -0
  213. package/dist/server/smartDraw.js.map +1 -0
  214. package/dist/server/workspace.d.ts +27 -0
  215. package/dist/server/workspace.js +172 -0
  216. package/dist/server/workspace.js.map +1 -0
  217. package/examples/.manic-output/40b6f3b9-7638-4c0e-bb4f-570d45d1b225/job.json +26 -0
  218. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/job.json +26 -0
  219. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/markers.json +13 -0
  220. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/out.mp4 +0 -0
  221. package/examples/.manic-workbench-threads/thread_3ce7448a13f64f9e887d1bc8106a97a8.json +45 -0
  222. package/examples/.manic-workbench-threads/thread_d494cda29249477591056234719e4a3a.json +21 -0
  223. package/examples/.manic-workbench-threads/thread_e98ebdc225184ea5b8ddda8b44541f63.json +29 -0
  224. package/examples/README.md +35 -0
  225. package/examples/a-story-1.manic +222 -0
  226. package/examples/a-story.manic +100 -0
  227. package/examples/achromat-cinematic.manic +105 -0
  228. package/examples/achromat.manic +32 -0
  229. package/examples/aes-decrypt.manic +359 -0
  230. package/examples/aes-encrypt.manic +359 -0
  231. package/examples/aes-round.manic +70 -0
  232. package/examples/aes-story.manic +622 -0
  233. package/examples/ai-story.manic +118 -0
  234. package/examples/analysis.manic +53 -0
  235. package/examples/archimedes_pi.manic +89 -0
  236. package/examples/area_under_curve.manic +131 -0
  237. package/examples/art-rakkan.manic +69 -0
  238. package/examples/aspheric-lens.manic +32 -0
  239. package/examples/astronomical-watch.manic +96 -0
  240. package/examples/asymptote-randomwalk3-reference.manic +58 -0
  241. package/examples/asymptote-tiling-reference.manic +65 -0
  242. package/examples/aws-clustered-web-services.manic +186 -0
  243. package/examples/aws-event-processing-clusters-poc.manic +97 -0
  244. package/examples/aws-three-tier-web-application.manic +134 -0
  245. package/examples/band.manic +43 -0
  246. package/examples/banner.manic +37 -0
  247. package/examples/bayes.manic +27 -0
  248. package/examples/bellcurve.manic +41 -0
  249. package/examples/bfs_dfs.manic +35 -0
  250. package/examples/block-tackle.manic +26 -0
  251. package/examples/bloom-scope.manic +172 -0
  252. package/examples/boolean.manic +46 -0
  253. package/examples/boxplot-wave.manic +93 -0
  254. package/examples/boxplot.manic +43 -0
  255. package/examples/brace.manic +46 -0
  256. package/examples/brachistochrone-annotated.manic +51 -0
  257. package/examples/brachistochrone.manic +27 -0
  258. package/examples/bubble_sort.manic +41 -0
  259. package/examples/bullet-block-annotated.manic +48 -0
  260. package/examples/bullet-block.manic +11 -0
  261. package/examples/bullet-impact.manic +65 -0
  262. package/examples/bungee.manic +9 -0
  263. package/examples/c4-internet-banking-components.manic +33 -0
  264. package/examples/c4-internet-banking-containers.manic +29 -0
  265. package/examples/c4-internet-banking.manic +26 -0
  266. package/examples/c4-story.manic +171 -0
  267. package/examples/c4-test.manic +52 -0
  268. package/examples/c4-zoom.manic +69 -0
  269. package/examples/calculus-demo.manic +129 -0
  270. package/examples/calculus-one.manic +288 -0
  271. package/examples/captions.manic +31 -0
  272. package/examples/car-suspension-annotated.manic +57 -0
  273. package/examples/car-suspension.manic +8 -0
  274. package/examples/cart-pendulum.manic +11 -0
  275. package/examples/charts-bar-line.manic +26 -0
  276. package/examples/charts-column-race.manic +19 -0
  277. package/examples/charts-gdp-race.manic +43 -0
  278. package/examples/charts-german-elections.manic +28 -0
  279. package/examples/charts-line-race.manic +21 -0
  280. package/examples/circle-in-three.manic +156 -0
  281. package/examples/circle-thirds-no-triangle.manic +161 -0
  282. package/examples/clip-window.manic +34 -0
  283. package/examples/cloud-feathers.manic +50 -0
  284. package/examples/cloud-jellyfish-v2.manic +87 -0
  285. package/examples/cloud-jellyfish.manic +48 -0
  286. package/examples/cloud-kaleidoscope.manic +48 -0
  287. package/examples/cloud-koi.manic +51 -0
  288. package/examples/cloud-lissajous.manic +23 -0
  289. package/examples/cloud-medusae.manic +46 -0
  290. package/examples/cloud-phoenix.manic +49 -0
  291. package/examples/cloud-plumes.manic +47 -0
  292. package/examples/cloud-pottery.manic +104 -0
  293. package/examples/cloud-shells.manic +50 -0
  294. package/examples/cloud-starfield.manic +23 -0
  295. package/examples/cloud-wave-lattice.manic +23 -0
  296. package/examples/cloud-word.manic +31 -0
  297. package/examples/cloud3-ripple.manic +53 -0
  298. package/examples/cloud3-sphere.manic +26 -0
  299. package/examples/clt.manic +35 -0
  300. package/examples/collide-blocks-annotated.manic +45 -0
  301. package/examples/collide-blocks.manic +11 -0
  302. package/examples/compare-pendulum.manic +11 -0
  303. package/examples/complex-flowchart.manic +196 -0
  304. package/examples/compound-pulley.manic +25 -0
  305. package/examples/conics.manic +46 -0
  306. package/examples/coordinates.manic +52 -0
  307. package/examples/correlation.manic +35 -0
  308. package/examples/covariance.manic +30 -0
  309. package/examples/creator-affine-fern-growth.manic +72 -0
  310. package/examples/creator-bowl-to-saddle.manic +86 -0
  311. package/examples/creator-branch-counting-tree3.manic +77 -0
  312. package/examples/creator-chaos-game-fern.manic +72 -0
  313. package/examples/creator-circle-inversion-chain.manic +61 -0
  314. package/examples/creator-convex-hull-depth.manic +59 -0
  315. package/examples/creator-coordinate-worlds.manic +182 -0
  316. package/examples/creator-ellipse-reflection-property.manic +59 -0
  317. package/examples/creator-free-kicks.manic +261 -0
  318. package/examples/creator-geometry-language-showcase.manic +259 -0
  319. package/examples/creator-geometry-morph-promo.manic +151 -0
  320. package/examples/creator-heightmap-world.manic +130 -0
  321. package/examples/creator-hilbert3-spatial-index.manic +203 -0
  322. package/examples/creator-how-rocket-launch-works.manic +192 -0
  323. package/examples/creator-implicit-surface-parameterized.manic +51 -0
  324. package/examples/creator-incenter-dissection.manic +56 -0
  325. package/examples/creator-lattice-paths.manic +118 -0
  326. package/examples/creator-line-inversion.manic +49 -0
  327. package/examples/creator-lsystem-fractal-curve.manic +121 -0
  328. package/examples/creator-mandelbrot-escape-test.manic +58 -0
  329. package/examples/creator-monty-hall.manic +104 -0
  330. package/examples/creator-noise-story.manic +123 -0
  331. package/examples/creator-one-tile-pattern-story.manic +169 -0
  332. package/examples/creator-pathfinding.manic +82 -0
  333. package/examples/creator-point-to-plane-distance.manic +167 -0
  334. package/examples/creator-race-quiz.manic +76 -0
  335. package/examples/creator-randomwalk3-diffusion.manic +72 -0
  336. package/examples/creator-reflected-ellipse.manic +48 -0
  337. package/examples/creator-rule90-sierpinski.manic +64 -0
  338. package/examples/creator-three-shadows-of-a-curve.manic +48 -0
  339. package/examples/creator-trigonometry-one-angle.manic +307 -0
  340. package/examples/creator-v2-latex-algebra.manic +29 -0
  341. package/examples/creator-v2-latex-calculus.manic +37 -0
  342. package/examples/creator-v2-latex-physics.manic +29 -0
  343. package/examples/creator-v2-olympiad-geometry.manic +92 -0
  344. package/examples/creator-v2-options-socials.manic +21 -0
  345. package/examples/creator-v2-timers.manic +25 -0
  346. package/examples/creator-v2-timing-square.manic +25 -0
  347. package/examples/creator-v2-timing.manic +34 -0
  348. package/examples/creator-v2.manic +36 -0
  349. package/examples/creator-why-rockets-use-stages.manic +198 -0
  350. package/examples/creator-wrap-real-line.manic +51 -0
  351. package/examples/cubic-graphs.manic +432 -0
  352. package/examples/curve-features.manic +41 -0
  353. package/examples/definedmotion-fourier-gallery.manic +171 -0
  354. package/examples/derivative-of-ln-x.manic +194 -0
  355. package/examples/diagonalise.manic +56 -0
  356. package/examples/dijkstra.manic +29 -0
  357. package/examples/dimensions-unfold.manic +211 -0
  358. package/examples/disc-integration.manic +172 -0
  359. package/examples/double-incline.manic +9 -0
  360. package/examples/double-integral3.manic +43 -0
  361. package/examples/double-pendulum.manic +35 -0
  362. package/examples/double-spring.manic +9 -0
  363. package/examples/drop-mass.manic +25 -0
  364. package/examples/eigen3.manic +34 -0
  365. package/examples/equal_cuts.manic +44 -0
  366. package/examples/equation.manic +16 -0
  367. package/examples/equilateral.manic +57 -0
  368. package/examples/euler_line.manic +51 -0
  369. package/examples/exponential-shells.manic +188 -0
  370. package/examples/extrude3.manic +37 -0
  371. package/examples/factorial-flowchart.manic +69 -0
  372. package/examples/fibonacci-sphere.manic +57 -0
  373. package/examples/flow-lorenz.manic +47 -0
  374. package/examples/fourier-series-live-wave.manic +114 -0
  375. package/examples/fourier-square-wave-live.manic +114 -0
  376. package/examples/fractal_tree.manic +39 -0
  377. package/examples/frame3-grid-policies.manic +48 -0
  378. package/examples/ftc.manic +54 -0
  379. package/examples/function_graph.manic +54 -0
  380. package/examples/galton-board-process.manic +150 -0
  381. package/examples/gcp-clustered-web-services.manic +186 -0
  382. package/examples/gcp-message-collecting.manic +139 -0
  383. package/examples/geo-pythagoras-short.manic +119 -0
  384. package/examples/glsl-boxgrid.manic +105 -0
  385. package/examples/glsl-parameter.manic +30 -0
  386. package/examples/glsl-raymarch.manic +59 -0
  387. package/examples/glsl-shapes.manic +122 -0
  388. package/examples/gradient-descent-field.manic +116 -0
  389. package/examples/gradient-fastest-descent-shorts.manic +153 -0
  390. package/examples/gradient-fastest-descent.manic +125 -0
  391. package/examples/gradient-pendulum-shorts.manic +117 -0
  392. package/examples/gradient.manic +74 -0
  393. package/examples/graph.manic +45 -0
  394. package/examples/graph_moving.manic +67 -0
  395. package/examples/grid-astar.manic +15 -0
  396. package/examples/grid-life-soup.manic +31 -0
  397. package/examples/grid-life-zoo.manic +46 -0
  398. package/examples/grid-life.manic +19 -0
  399. package/examples/grid-wfc.manic +13 -0
  400. package/examples/growing-fractal-tree3.manic +58 -0
  401. package/examples/gun-shot.manic +82 -0
  402. package/examples/hashmap.manic +38 -0
  403. package/examples/heightmap3-world.manic +64 -0
  404. package/examples/heightmap3.manic +23 -0
  405. package/examples/hilbert-curve3-space-filling.manic +117 -0
  406. package/examples/hill_run.manic +71 -0
  407. package/examples/histogram.manic +43 -0
  408. package/examples/hotdog-taco.manic +147 -0
  409. package/examples/hue_wave.manic +35 -0
  410. package/examples/hypothesis.manic +32 -0
  411. package/examples/image.manic +29 -0
  412. package/examples/incircle_tangents.manic +64 -0
  413. package/examples/incline-bumper.manic +11 -0
  414. package/examples/incline-pulley.manic +11 -0
  415. package/examples/incline-showcase.manic +55 -0
  416. package/examples/inline-math.manic +16 -0
  417. package/examples/inscribed-angle-short.manic +56 -0
  418. package/examples/integral-sqrt-tanx.manic +255 -0
  419. package/examples/integrals.manic +274 -0
  420. package/examples/inverse-derivatives.manic +94 -0
  421. package/examples/k8s-cluster-components.manic +82 -0
  422. package/examples/k8s-stateful-architecture.manic +134 -0
  423. package/examples/k8s-three-tier.manic +146 -0
  424. package/examples/kapitza.manic +11 -0
  425. package/examples/latex-disintegration.manic +123 -0
  426. package/examples/lens-paper.manic +36 -0
  427. package/examples/lens-prescription.manic +33 -0
  428. package/examples/lens-system.manic +34 -0
  429. package/examples/lens.manic +31 -0
  430. package/examples/limit-infinity.manic +30 -0
  431. package/examples/limit.manic +33 -0
  432. package/examples/linear-algebra-3d.manic +50 -0
  433. package/examples/linear-algebra.manic +115 -0
  434. package/examples/linear-map.manic +39 -0
  435. package/examples/linear-map3.manic +33 -0
  436. package/examples/linear-system.manic +99 -0
  437. package/examples/linear_transform.manic +43 -0
  438. package/examples/linked_list.manic +38 -0
  439. package/examples/lln.manic +31 -0
  440. package/examples/loop-cinematic.manic +41 -0
  441. package/examples/loop-track.manic +11 -0
  442. package/examples/lorenz-attractor.manic +55 -0
  443. package/examples/lorenz-shells.manic +43 -0
  444. package/examples/lost-in-patterns.manic +149 -0
  445. package/examples/lsystem-asymptote-curves.manic +81 -0
  446. package/examples/manic-ml-activation-focus.manic +133 -0
  447. package/examples/manic-ml-cnn-edge-story.manic +102 -0
  448. package/examples/manic-ml-forward-pass.manic +93 -0
  449. package/examples/manic-ml-learning-step.manic +116 -0
  450. package/examples/manic-ml-logits-sampling.manic +112 -0
  451. package/examples/manic-ml-scalar-to-tensor.manic +143 -0
  452. package/examples/manic-ml-token-embedding.manic +110 -0
  453. package/examples/manic-ml-transformer-attention.manic +102 -0
  454. package/examples/manic-ml-transformer-block.manic +116 -0
  455. package/examples/manic-promo.manic +64 -0
  456. package/examples/map-attractor.manic +45 -0
  457. package/examples/mask-lens.manic +33 -0
  458. package/examples/matrix.manic +37 -0
  459. package/examples/matrix3.manic +101 -0
  460. package/examples/matrix_addition.manic +66 -0
  461. package/examples/matrix_addition_plane.manic +91 -0
  462. package/examples/maxwell-boltzmann-effusion-v2.manic +142 -0
  463. package/examples/maxwell-boltzmann-process.manic +86 -0
  464. package/examples/microservices-platform.manic +140 -0
  465. package/examples/molecule.manic +8 -0
  466. package/examples/morph-icons.manic +29 -0
  467. package/examples/morph.manic +29 -0
  468. package/examples/morph3.manic +49 -0
  469. package/examples/motion-flow-foundation.manic +148 -0
  470. package/examples/motion-graphics-v2-story.manic +189 -0
  471. package/examples/motion-graphics-v2.manic +81 -0
  472. package/examples/motion-graphics.manic +81 -0
  473. package/examples/multivariable3.manic +26 -0
  474. package/examples/mystory.manic +9 -0
  475. package/examples/newton.manic +39 -0
  476. package/examples/newtons-cradle.manic +10 -0
  477. package/examples/nine_point.manic +59 -0
  478. package/examples/noise-terrain.manic +16 -0
  479. package/examples/off-axis.manic +32 -0
  480. package/examples/onprem-advanced-web-service-v2.manic +196 -0
  481. package/examples/onprem-advanced-web-service.manic +175 -0
  482. package/examples/orthocenter.manic +63 -0
  483. package/examples/param3.manic +43 -0
  484. package/examples/parameter-journeys.manic +154 -0
  485. package/examples/parameterized-field-advection.manic +57 -0
  486. package/examples/parameterized-generated-families3.manic +83 -0
  487. package/examples/particles-flow.manic +61 -0
  488. package/examples/pascal-triangle.manic +92 -0
  489. package/examples/pendulum-annotated.manic +72 -0
  490. package/examples/pendulum-damped.manic +35 -0
  491. package/examples/pendulum.manic +38 -0
  492. package/examples/perfect-reel.manic +43 -0
  493. package/examples/pie.manic +41 -0
  494. package/examples/pieday.manic +113 -0
  495. package/examples/piston.manic +7 -0
  496. package/examples/popkorn-field.manic +38 -0
  497. package/examples/prism-cinematic.manic +36 -0
  498. package/examples/prism.manic +32 -0
  499. package/examples/probability.manic +57 -0
  500. package/examples/process-branching-dispatch.manic +71 -0
  501. package/examples/process-stream-observe.manic +54 -0
  502. package/examples/projection.manic +57 -0
  503. package/examples/prompt-test-10.manic +257 -0
  504. package/examples/prompt-test-11.manic +168 -0
  505. package/examples/prompt-test-12.manic +177 -0
  506. package/examples/prompt-test-13.manic +228 -0
  507. package/examples/prompt-test-14.manic +319 -0
  508. package/examples/prompt-test-15.manic +325 -0
  509. package/examples/prompt-test-16.manic +252 -0
  510. package/examples/prompt-test-2.manic +239 -0
  511. package/examples/prompt-test-3.manic +336 -0
  512. package/examples/prompt-test-4.manic +195 -0
  513. package/examples/prompt-test-5.manic +223 -0
  514. package/examples/prompt-test-6.manic +222 -0
  515. package/examples/prompt-test-7.manic +156 -0
  516. package/examples/prompt-test-8.manic +266 -0
  517. package/examples/prompt-test-9.manic +171 -0
  518. package/examples/prompt-test.manic +158 -0
  519. package/examples/pulley-annotated.manic +54 -0
  520. package/examples/pulley-paper.manic +52 -0
  521. package/examples/pulley-scale.manic +23 -0
  522. package/examples/pulley.manic +24 -0
  523. package/examples/quadratic-formula-continuity.manic +110 -0
  524. package/examples/quiz-euler.manic +52 -0
  525. package/examples/quiz-geometry-2.manic +107 -0
  526. package/examples/quiz-geometry.manic +108 -0
  527. package/examples/quiz-skins.manic +22 -0
  528. package/examples/raft-cm.manic +24 -0
  529. package/examples/ramp.manic +25 -0
  530. package/examples/ray-fan.manic +27 -0
  531. package/examples/raymarch-alpha.manic +39 -0
  532. package/examples/raymarch-boxgrid.manic +47 -0
  533. package/examples/raymarch-docker-latency.manic +74 -0
  534. package/examples/raymarch-metaballs.manic +37 -0
  535. package/examples/raymarch-sculpture.manic +39 -0
  536. package/examples/raymarch-shapes3.manic +31 -0
  537. package/examples/reactive-integral.manic +172 -0
  538. package/examples/reactive-math-journey.manic +185 -0
  539. package/examples/reactive-math-notation.manic +150 -0
  540. package/examples/reactive-multiformat.manic +130 -0
  541. package/examples/reactive-world.manic +111 -0
  542. package/examples/refraction-paper.manic +40 -0
  543. package/examples/refraction.manic +32 -0
  544. package/examples/resonance.manic +10 -0
  545. package/examples/rewrite-exponential-cubic.manic +141 -0
  546. package/examples/rewrite-integration.manic +199 -0
  547. package/examples/riemann_rainbow.manic +61 -0
  548. package/examples/riemann_readout.manic +61 -0
  549. package/examples/robot-arm.manic +25 -0
  550. package/examples/rref.manic +48 -0
  551. package/examples/second-law-thermodynamics.manic +385 -0
  552. package/examples/series-parallel-springs.manic +8 -0
  553. package/examples/serverless-processing.manic +145 -0
  554. package/examples/shader-cellular.manic +35 -0
  555. package/examples/shader-fractal.manic +45 -0
  556. package/examples/shader-fx.manic +34 -0
  557. package/examples/shader-glitch-grid.manic +55 -0
  558. package/examples/shader-parameter.manic +25 -0
  559. package/examples/shader-patterns.manic +37 -0
  560. package/examples/shader-plasma.manic +43 -0
  561. package/examples/shader-shapes-dsl.manic +46 -0
  562. package/examples/shader-shapes.manic +37 -0
  563. package/examples/shader-warp.manic +22 -0
  564. package/examples/shapes-howto.manic +411 -0
  565. package/examples/sine_wave.manic +42 -0
  566. package/examples/skew.manic +40 -0
  567. package/examples/smoke.rs +57 -0
  568. package/examples/solids3.manic +22 -0
  569. package/examples/some-story.manic +299 -0
  570. package/examples/spinning-cylinder-flow.manic +87 -0
  571. package/examples/spline.manic +21 -0
  572. package/examples/spot-diagram.manic +32 -0
  573. package/examples/spring-annotated.manic +60 -0
  574. package/examples/spring-chain.manic +11 -0
  575. package/examples/spring-damped.manic +33 -0
  576. package/examples/spring-incline.manic +10 -0
  577. package/examples/spring-paper.manic +46 -0
  578. package/examples/spring-pendulum.manic +14 -0
  579. package/examples/spring.manic +33 -0
  580. package/examples/sqrt-tanx.manic +217 -0
  581. package/examples/ssl-handshake-sdf.manic +116 -0
  582. package/examples/stack_queue.manic +53 -0
  583. package/examples/statistics.manic +60 -0
  584. package/examples/story-addressable-asset-cues.manic +71 -0
  585. package/examples/story-dependent-chain-history.manic +56 -0
  586. package/examples/story-living-dependency-cloud.manic +50 -0
  587. package/examples/story-time-varying-field3.manic +57 -0
  588. package/examples/story.manic +4 -0
  589. package/examples/string-art-breath.manic +70 -0
  590. package/examples/string-wave.manic +10 -0
  591. package/examples/summary.manic +48 -0
  592. package/examples/svg-howto.manic +172 -0
  593. package/examples/svg-import.manic +18 -0
  594. package/examples/systems-architecture-poc.manic +92 -0
  595. package/examples/systems-arrow-patterns.manic +151 -0
  596. package/examples/systems-foundation.manic +71 -0
  597. package/examples/systems-rabbitmq-consumers.manic +118 -0
  598. package/examples/table.manic +39 -0
  599. package/examples/table_braces.manic +54 -0
  600. package/examples/tangent-length-short.manic +57 -0
  601. package/examples/tangent.manic +29 -0
  602. package/examples/tangents.manic +54 -0
  603. package/examples/taylor.manic +44 -0
  604. package/examples/terminal_boot.manic +40 -0
  605. package/examples/test.manic +61 -0
  606. package/examples/text-guide.manic +304 -0
  607. package/examples/textbook-coordinate-worlds.manic +129 -0
  608. package/examples/textbook-doubly-list.manic +33 -0
  609. package/examples/textbook-function-to-solid.manic +126 -0
  610. package/examples/textbook-geometry-dimension-reduction.manic +129 -0
  611. package/examples/textbook-incline-fbd.manic +43 -0
  612. package/examples/textbook-length-area-volume.manic +137 -0
  613. package/examples/textbook-matrix-inverses.manic +172 -0
  614. package/examples/textbook-pulley.manic +35 -0
  615. package/examples/textbook-statistical-dimensions.manic +151 -0
  616. package/examples/textbook-tension.manic +39 -0
  617. package/examples/textbook-watermelon-sections.manic +216 -0
  618. package/examples/thales-semicircle-short.manic +53 -0
  619. package/examples/three-d-v2-lab.manic +83 -0
  620. package/examples/three-d-v2-story.manic +106 -0
  621. package/examples/three-d-v2.manic +69 -0
  622. package/examples/three_d.manic +39 -0
  623. package/examples/timing-v2-scene.manic +47 -0
  624. package/examples/trajectory.manic +28 -0
  625. package/examples/transform_copy.manic +35 -0
  626. package/examples/transforms.manic +54 -0
  627. package/examples/trapped-light-dimensions.manic +226 -0
  628. package/examples/tree-of-leaves.manic +215 -0
  629. package/examples/triangle.manic +68 -0
  630. package/examples/two_person_walk.manic +296 -0
  631. package/examples/two_pointer.manic +32 -0
  632. package/examples/type-to-sdf.manic +139 -0
  633. package/examples/typewriter.manic +28 -0
  634. package/examples/vector_field.manic +32 -0
  635. package/examples/vertical-spring.manic +10 -0
  636. package/examples/volume3.manic +21 -0
  637. package/examples/volumes-solid-of-revolution.manic +111 -0
  638. package/examples/walk.manic +154 -0
  639. package/examples/wheel-duo.manic +91 -0
  640. package/examples/wheel-radial.manic +78 -0
  641. package/examples/wheel-square.manic +83 -0
  642. package/examples/wireframe-spheres.manic +37 -0
  643. package/examples/zeroth-law-thermodynamics.manic +269 -0
  644. package/package.json +59 -0
@@ -0,0 +1,43 @@
1
+ title("The double integral — volume as a limit of finer columns");
2
+ canvas("16:9");
3
+
4
+ camera3((9, -11, 9), (0, 0, 0.7), 40);
5
+ axes3(world, (0, 0, 0), 3);
6
+ color(world, dim);
7
+
8
+ text(cap, (cx, h - 54), "coarse columns");
9
+ size(cap, 22); color(cap, cyan); bold(cap); display(cap); hidden(cap);
10
+
11
+ // the surface, kept faint so the columns beneath it read
12
+ surface3(hill, "1.6*exp(-(x*x + y*y)*0.28)", (-3, 3), (-3, 3), 30);
13
+ color(hill, cyan); opacity(hill, 0.22); untraced(hill);
14
+
15
+ // the volume under it, at three resolutions — each finer sum hugs the surface
16
+ volume3(v1, hill, 3);
17
+ color(v1, lime); hidden(v1);
18
+ volume3(v2, hill, 7);
19
+ color(v2, lime); hidden(v2);
20
+ volume3(v3, hill, 16);
21
+ color(v3, lime); hidden(v3);
22
+
23
+ // ---- timeline ----
24
+ show(world, 0.5);
25
+ draw(hill, 1.4);
26
+ wait(0.3);
27
+
28
+ // 3x3: a crude estimate
29
+ show(cap, 0.4);
30
+ show(v1, 0.7);
31
+ wait(1.2);
32
+
33
+ // 7x7: closer
34
+ fade(v1, 0.5);
35
+ say(cap, "finer: the sum gets closer");
36
+ show(v2, 0.7);
37
+ wait(1.2);
38
+
39
+ // 16x16: the columns fill the true volume under the surface
40
+ fade(v2, 0.5);
41
+ say(cap, "finer still -> the true volume (a double integral)");
42
+ show(v3, 0.8);
43
+ orbit3(70, 34, 16, 4.5);
@@ -0,0 +1,35 @@
1
+ // ============================================================================
2
+ // double-pendulum.manic — chaos, on the physics baseline (Layer 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `doublependulum(id, [center], [angle1], [angle2], [unit])` — two arms hinged
5
+ // end-to-end: deterministic, yet exquisitely sensitive to initial conditions.
6
+ // PRE-SIMULATED with RK4 (so the render is frame-identical every run). It's a
7
+ // 4-D system, so it inherits `phase` (θ₁ vs θ₂), `timegraph`, and `energygraph`
8
+ // — but NOT `well` (there's no single-variable potential). `run(id,[dur])` plays
9
+ // it; drawing `{id}.path` in parallel traces the outer bob's chaotic curve.
10
+ //
11
+ // TO ADAPT: nudge angle2 by one degree and re-run — the trail diverges completely.
12
+ // ============================================================================
13
+
14
+ title("Double pendulum — deterministic chaos");
15
+ canvas("16:9");
16
+
17
+ text(hdr, (cx, 44), "Double pendulum — deterministic, yet unpredictable");
18
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr);
19
+
20
+ // the chaotic sim on the left (outer bob traces the wild curve)
21
+ doublependulum(dp, (400, 250), 125, 110);
22
+ untraced(dp.path);
23
+
24
+ // the views that DO apply to a 4-D system (no potential well here)
25
+ phase(dp, (900, 190), 100); // θ₁ vs θ₂ — the coupled angles
26
+ energygraph(dp, (900, 480), 100); // KE / PE / total (total ~conserved)
27
+
28
+ text(cap, (cx, h - 32), "outer bob's trail is chaotic; total energy stays (nearly) conserved — no friction");
29
+ size(cap, 16); color(cap, dim); display(cap);
30
+
31
+ // trace the chaotic trail AS the pendulum swings (draw + run in parallel)
32
+ par {
33
+ run(dp, 12);
34
+ draw(dp.path, 12);
35
+ }
@@ -0,0 +1,9 @@
1
+ // double-spring.manic — two masses coupled by springs: energy sloshes (beating).
2
+ title("Coupled springs — energy sloshes back and forth");
3
+ canvas("16:9");
4
+ text(hdr,(cx,44),"Two coupled masses — push one, and the energy beats between them"); size(hdr,22); color(hdr,cyan); bold(hdr); display(hdr);
5
+ doublespring(dd, (430,300), 85);
6
+ phase(dd, (980,200), 100); // x1 vs x2 — normal modes are diagonals
7
+ energygraph(dd, (980,470), 100);
8
+ text(cap,(cx,h-32),"block 1 (cyan) starts displaced; watch block 2 (magenta) pick up its swing"); size(cap,15); color(cap,dim); display(cap);
9
+ run(dd, 12);
@@ -0,0 +1,25 @@
1
+ // ============================================================================
2
+ // drop-mass.manic — an inelastic collision, on the physics baseline (Layer 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `dropmass(id, [center], [dropheight], [unit])` — a mass is dropped onto a
5
+ // block resting on a spring. It free-falls, STICKS (perfectly inelastic), then
6
+ // the heavier combined mass oscillates about a lower equilibrium. The collision
7
+ // loses kinetic energy — so `energygraph`'s total STEPS DOWN at impact. Then it
8
+ // is conserved again. PRE-SIMULATED with RK4; `run(id,[dur])` replays it.
9
+ //
10
+ // TO ADAPT: raise dropheight for a faster impact and a bigger energy step.
11
+ // ============================================================================
12
+
13
+ title("Drop mass — an inelastic collision loses energy");
14
+ canvas("16:9");
15
+
16
+ text(hdr, (cx, 44), "Dropped mass sticks — energy is lost in the inelastic collision");
17
+ size(hdr, 22); color(hdr, cyan); bold(hdr); display(hdr);
18
+
19
+ dropmass(dm, (440, 150), 1.2);
20
+ energygraph(dm, (960, 330), 120);
21
+
22
+ text(cap, (cx, h - 32), "watch the gold total energy line step DOWN the instant the magenta mass sticks to the block");
23
+ size(cap, 15); color(cap, dim); display(cap);
24
+
25
+ run(dm, 7);
@@ -0,0 +1,34 @@
1
+ // ============================================================================
2
+ // eigen3.manic — eigenvectors of a 3x3 matrix (the 3-D echo of eigen)
3
+ // ----------------------------------------------------------------------------
4
+ // `eigen3(id, (cx,cy,cz), a,b,c,d,e,f,g,h,i, [color])` draws the real
5
+ // EIGENVECTORS of the 3x3 [[a,b,c],[d,e,f],[g,h,i]] as invariant lines through
6
+ // the origin — the directions a vector on them only STRETCHES (by λ), never
7
+ // turns. A real 3x3 always has at least one real eigenvector; a rotation leaves
8
+ // two complex eigenvalues, which are noted.
9
+ //
10
+ // TO ADAPT: change the nine numbers. A symmetric matrix (as here) has three
11
+ // perpendicular real eigen-axes; a rotation like (0,-1,0, 1,0,0, 0,0,1) shows
12
+ // one real axis (the axis of rotation) + a "2 complex" note.
13
+ // ============================================================================
14
+
15
+ title("Eigenvectors of a 3x3 matrix");
16
+ canvas("16:9");
17
+
18
+ camera3((7, 5.5, 6), (0, 0, 0), 42);
19
+ grid3(floor, (0, 0, 0), 3, 1); color(floor, dim); opacity(floor, 0.35);
20
+
21
+ // symmetric M = [[1,0,0],[0,3,1],[0,1,3]] — three real eigenvalues: 1, 2, 4
22
+ eigen3(ev, (0, 0, 0), 1, 0, 0, 0, 3, 1, 0, 1, 3);
23
+
24
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
25
+
26
+ say(cap, "when the matrix acts, most directions turn — but a few only stretch", 0.5);
27
+ orbit3(52, 24, 10, 4, smooth);
28
+
29
+ say(cap, "those invariant lines are the eigenvectors; the stretch factor is lambda", 0.5);
30
+ orbit3(122, 34, 10, 4, smooth);
31
+
32
+ say(cap, "this symmetric 3x3 has three real eigenvalues: 1, 2 and 4", 0.5);
33
+ orbit3(58, 22, 9, 4.5, smooth);
34
+ wait(0.5);
@@ -0,0 +1,44 @@
1
+ // Equal Cuts — a circle sliced into equal pieces, repeatedly doubled:
2
+ // 2 → 4 → 8 equal wedges. Each "cut" is a diameter traced across the circle
3
+ // at an equal angle. (manic has no sector primitive yet, so cuts are lines.)
4
+ //
5
+ // manic examples/equal_cuts.manic
6
+ // manic examples/equal_cuts.manic --record out --fps 60
7
+
8
+ title("Equal Cuts");
9
+ canvas(1280, 720);
10
+
11
+ // the circle to divide, centred at (640, 400) with radius 240
12
+ circle(pie, (640, 400), 240); stroke(pie, 3);
13
+
14
+ // four diameters through the centre at 0, 45, 90, 135 degrees.
15
+ // revealed in stages, they cut the circle into 2, then 4, then 8 equal pieces.
16
+ line(c0, (400, 400), (880, 400)); color(c0, magenta); stroke(c0, 3); untraced(c0); // 0
17
+ line(c1, (640, 160), (640, 640)); color(c1, magenta); stroke(c1, 3); untraced(c1); // 90
18
+ line(c2, (470, 230), (810, 570)); color(c2, lime); stroke(c2, 3); untraced(c2); // 135
19
+ line(c3, (810, 230), (470, 570)); color(c3, lime); stroke(c3, 3); untraced(c3); // 45
20
+
21
+ text(cap, (640, 690), ""); color(cap, dim); size(cap, 22);
22
+ text(count, (1040, 170), ""); color(count, cyan); size(count, 34); bold(count);
23
+
24
+ // --- cut in half ---
25
+ say(cap, "cut the circle in half");
26
+ draw(c0, 0.6);
27
+ say(count, "2 pieces");
28
+ wait(0.5);
29
+
30
+ // --- cut again: four equal pieces ---
31
+ say(cap, "cut again at a right angle — four equal pieces");
32
+ draw(c1, 0.6);
33
+ say(count, "4 pieces");
34
+ wait(0.5);
35
+
36
+ // --- and again: eight equal pieces ---
37
+ say(cap, "and again on both diagonals — eight equal pieces");
38
+ par {
39
+ draw(c2, 0.6);
40
+ draw(c3, 0.6);
41
+ }
42
+ say(count, "8 pieces");
43
+ pulse(pie);
44
+ wait(1.2);
@@ -0,0 +1,16 @@
1
+ // LaTeX math typesetting via `equation(...)`. Put the LaTeX in BACKTICKS so the
2
+ // backslashes survive. Rendered white-on-transparent and tinted by the entity
3
+ // colour, so `color(...)` and `template(...)` both work.
4
+ title("Equations");
5
+ canvas("16:9");
6
+
7
+ equation(quad, (cx, 150), `x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}`, 68);
8
+ color(quad, cyan);
9
+
10
+ equation(sum, (cx, 340), `\sum_{k=1}^{n} k = \frac{n(n+1)}{2}`, 60);
11
+
12
+ equation(euler, (cx, 500), `e^{i\pi} + 1 = 0`, 64);
13
+ color(euler, gold);
14
+
15
+ equation(intg, (cx, 640), `\int_0^1 x^2\,dx = \tfrac{1}{3}`, 56);
16
+ color(intg, lime);
@@ -0,0 +1,57 @@
1
+ // Equilateral Triangle — Euclid, Elements Book I, Proposition 1. Given a segment
2
+ // AB: draw the circle centred at A through B and the circle centred at B through
3
+ // A; where they cross is the apex of an equilateral triangle. Every side then
4
+ // equals AB. It's a fully DYNAMIC construction — drag B at the end and the
5
+ // circles, the intersection, and the triangle all stay correct.
6
+ //
7
+ // New geo builtins: circle2 (circle by centre + a point on it) and circlecircle
8
+ // (the two intersection points of two circles).
9
+ //
10
+ // Note: each compass circle has radius |AB|, so keep A and B close enough that
11
+ // the circles fit the canvas (here |AB| ~ 200 px).
12
+ //
13
+ // manic examples/equilateral.manic
14
+
15
+ title("Equilateral Triangle");
16
+ canvas("16:9");
17
+
18
+ text(head, (cx, 96), "Euclid I.1 -- two circles give an equilateral triangle");
19
+ color(head, cyan); size(head, 24); hidden(head);
20
+
21
+ point(A, (540, 470), "A");
22
+ point(B, (740, 470), "B");
23
+ segment(ab, A, B); color(ab, fg); stroke(ab, 3); untraced(ab);
24
+
25
+ // the two compass circles (each of radius AB)
26
+ circle2(cA, A, B); color(cA, dim); stroke(cA, 1.5); untraced(cA);
27
+ circle2(cB, B, A); color(cB, dim); stroke(cB, 1.5); untraced(cB);
28
+
29
+ // where they meet: C0 (below AB) and C1 (above AB) — take the apex above
30
+ circlecircle(C, A, B, B, A);
31
+ hidden(C0); hidden(C1);
32
+ label(C1, "C", (16, -16)); color(C1.label, lime);
33
+ segment(ac, A, C1); color(ac, lime); stroke(ac, 3); untraced(ac);
34
+ segment(bc, B, C1); color(bc, lime); stroke(bc, 3); untraced(bc);
35
+
36
+ // --- construct it ---
37
+ show(head, 0.5);
38
+ show(A, 0.3); show(B, 0.3);
39
+ draw(ab, 0.6);
40
+
41
+ section("Two circles");
42
+ par { draw(cA, 0.9); draw(cB, 0.9); }
43
+ show(C1, 0.4);
44
+
45
+ section("The triangle");
46
+ par { draw(ac, 0.7); draw(bc, 0.7); }
47
+ par { pulse(ac); pulse(bc); pulse(ab); }
48
+ wait(0.6);
49
+
50
+ // --- drag a vertex: it stays equilateral (circles stay on-canvas) ---
51
+ section("Drag a vertex");
52
+ move(B, (700, 360), 1.6, smooth);
53
+ wait(0.3);
54
+ move(B, (660, 560), 1.6, smooth);
55
+ wait(0.3);
56
+ move(B, (740, 470), 1.2, smooth);
57
+ wait(1.0);
@@ -0,0 +1,51 @@
1
+ // The Euler Line — in any triangle, the circumcenter O, centroid G, and
2
+ // orthocenter H are collinear (and OG : GH = 1 : 2). Constructions are
3
+ // dynamic: drag C and the three centres stay on one line.
4
+ //
5
+ // manic examples/euler_line.manic
6
+ // manic examples/euler_line.manic --record out --fps 60
7
+
8
+ title("The Euler Line");
9
+ canvas(1280, 720);
10
+
11
+ text(head, (640, 120), "circumcenter, centroid, orthocenter — collinear");
12
+ display(head); color(head, cyan); size(head, 26); hidden(head);
13
+ text(cap, (640, 668), ""); color(cap, dim); size(cap, 22);
14
+
15
+ point(A, (300, 560), "A");
16
+ point(B, (1000, 540), "B");
17
+ point(C, (560, 190), "C");
18
+ hidden(A); hidden(B); hidden(C);
19
+
20
+ segment(ab, A, B); segment(bc, B, C); segment(ca, C, A);
21
+ untraced(ab); untraced(bc); untraced(ca);
22
+ circumcircle(cc, A, B, C); untraced(cc);
23
+
24
+ circumcenter(O, A, B, C); color(O, magenta); label(O, "O", (18, -14)); hidden(O);
25
+ centroid(G, A, B, C); color(G, lime); label(G, "G", (18, -14)); hidden(G);
26
+ orthocenter(H, A, B, C); color(H, cyan); label(H, "H", (-30, -14)); hidden(H);
27
+ segment(euler, O, H); color(euler, magenta); stroke(euler, 3); untraced(euler);
28
+
29
+ show(head, 0.5);
30
+ say(cap, "any triangle, with its circumcircle");
31
+ par { show(A); show(B); show(C); }
32
+ par { draw(ab, 0.5); draw(bc, 0.5); draw(ca, 0.5); }
33
+ draw(cc, 0.9);
34
+ wait(0.4);
35
+
36
+ section("Three centres");
37
+ say(cap, "circumcenter O, centroid G, orthocenter H");
38
+ stagger(0.3) { show(O); show(G); show(H); }
39
+ wait(0.4);
40
+
41
+ section("The Euler line");
42
+ say(cap, "they always lie on a single line");
43
+ draw(euler, 0.9);
44
+ wait(0.6);
45
+
46
+ section("Drag a vertex");
47
+ say(cap, "move C — O, G, H stay collinear");
48
+ move(C, (770, 220), 1.2, smooth);
49
+ move(C, (420, 250), 1.2, smooth);
50
+ move(C, (560, 190), 1.0, smooth);
51
+ wait(1.0);
@@ -0,0 +1,188 @@
1
+ // engine-test-13 — native 3D reconstruction of the reference.
2
+ //
3
+ // The picture is not a flat disc. It is a large, grainy spherical particle cap
4
+ // meeting a family of exponentially growing particle shells at a shared hot
5
+ // origin. Looking down their common axis makes concentric rings; a full camera
6
+ // orbit reveals the offset spherical shells and returns to the opening frame.
7
+ title("∭ 𝘢(𝘵) ∝ eᴴᵗ");
8
+ canvas(1638, 1482);
9
+ template("black");
10
+ bloom(0.90, 0.22, 52);
11
+
12
+ // Keep the mathematical title fixed in screen space while the 3-D field turns.
13
+ text(formulaTitle, (819, 70), "∭ 𝘢(𝘵) ∝ eᴴᵗ");
14
+ size(formulaTitle, 44);
15
+ color(formulaTitle, gold);
16
+ bold(formulaTitle);
17
+ display(formulaTitle);
18
+ sticky(formulaTitle);
19
+ z(formulaTitle, 20);
20
+
21
+ // The camera begins on the cap side of the common tangent. It keeps turning in
22
+ // one direction throughout the 20-second hold, completing 1.5 revolutions.
23
+ // That puts opposite face-on views about 6.67 s apart, matching the reference
24
+ // cadence; four fast turns made the alternating side views read as oscillation.
25
+ // The wider field of view keeps the luminous rim inside the complete orbit.
26
+ camera3((-32, 0, 0), (0, 0, 0), 21.0, perspective);
27
+
28
+ // --- large spherical cap --------------------------------------------------
29
+ // Several low-opacity random skins give the reference its fine, multicolour
30
+ // grain. Surface-point foreshortening naturally creates the bright rim.
31
+ cloud3(outerRose, 52000, #d78676, 0.095) {
32
+ let ct = -1 + 1.18 * rand2(i, 10.1);
33
+ let st = sqrt(1 - ct * ct);
34
+ let th = tau * rand2(i, 11.9);
35
+ let rr = 4.66 + 0.075 * (rand2(i, 11.3) - 0.5);
36
+ let x = rr * ct;
37
+ let y = rr * st * cos(th);
38
+ let z = rr * st * sin(th);
39
+ let alpha = 0.42 + 0.58 * (-ct);
40
+ let r = 0.042;
41
+ }
42
+ glow(outerRose, 1);
43
+
44
+ cloud3(outerViolet, 48000, #72589f, 0.072) {
45
+ let ct = -1 + 1.18 * rand2(i, 22.7);
46
+ let st = sqrt(1 - ct * ct);
47
+ let th = tau * rand2(i, 24.3);
48
+ let rr = 4.69 + 0.09 * (rand2(i, 23.9) - 0.5);
49
+ let x = rr * ct;
50
+ let y = rr * st * cos(th);
51
+ let z = rr * st * sin(th);
52
+ let alpha = 0.30 + 0.70 * (1 + ct);
53
+ let r = 0.038;
54
+ }
55
+ glow(outerViolet, 1);
56
+
57
+ cloud3(outerSilver, 36000, #b8d8ef, 0.072) {
58
+ let ct = -1 + 1.18 * rand2(i, 36.3);
59
+ let st = sqrt(1 - ct * ct);
60
+ let th = tau * rand2(i, 38.7);
61
+ let rr = 4.72 + 0.055 * (rand2(i, 37.1) - 0.5);
62
+ let x = rr * ct;
63
+ let y = rr * st * cos(th);
64
+ let z = rr * st * sin(th);
65
+ let alpha = 0.22 + 0.78 * (1 + ct);
66
+ let r = 0.034;
67
+ }
68
+ glow(outerSilver, 1);
69
+
70
+ // A sparse warm skin just outside the main boundary produces the thin amber
71
+ // fringe visible around the lavender rim in the reference.
72
+ cloud3(outerAmber, 18000, #d67425, 0.026) {
73
+ let ct = -1 + 1.18 * rand2(i, 50.3);
74
+ let st = sqrt(1 - ct * ct);
75
+ let th = tau * rand2(i, 52.9);
76
+ let rr = 4.79 + 0.08 * (rand2(i, 51.7) - 0.5);
77
+ let x = rr * ct;
78
+ let y = rr * st * cos(th);
79
+ let z = rr * st * sin(th);
80
+ let alpha = 0.35 + 0.65 * (-ct);
81
+ let r = 0.036;
82
+ }
83
+ glow(outerAmber, 1);
84
+
85
+ // A broad, extremely faint splat layer closes the gaps between the fine
86
+ // grains. Additive accumulation turns it into the milky cosmic illumination
87
+ // visible in the recording without replacing the surface texture.
88
+ cloud3(outerCosmos, 90000, #b99bbd, 0.012) {
89
+ let ct = -1 + 1.18 * rand2(i, 118.1);
90
+ let st = sqrt(1 - ct * ct);
91
+ let th = tau * rand2(i, 121.7);
92
+ let rr = 4.69 + 0.10 * (rand2(i, 119.9) - 0.5);
93
+ let x = rr * ct;
94
+ let y = rr * st * cos(th);
95
+ let z = rr * st * sin(th);
96
+ let alpha = 0.32 + 0.68 * (-ct);
97
+ let r = 0.085;
98
+ }
99
+ glow(outerCosmos, 1);
100
+
101
+ // --- exponential shell family -------------------------------------------
102
+ // Every sphere is tangent at the origin. The gold family grows inward with
103
+ // centre=(-radius,0,0); pink/violet/cyan grow outward from (+radius,0,0).
104
+ // Exponential radius growth turns the face-on rings into the nested horn seen
105
+ // edge-on. `s` selects one sphere and `j` selects a deterministic surface point;
106
+ // each colour family remains one efficient renderer batch.
107
+ cloud3(shellGold, 33600, #ffad24, 0.080) {
108
+ let per = 4200;
109
+ let s = floor(i / per);
110
+ let j = i - s * per;
111
+ let sr = 0.080 * exp(0.310 * s);
112
+ let ct = 1 - 2 * rand2(j, s + 63.1);
113
+ let st = sqrt(1 - ct * ct);
114
+ let th = tau * rand2(j, s + 65.7);
115
+ let rr = sr + 0.012 * (rand2(i, s + 4.2) - 0.5);
116
+ let x = -sr + rr * ct;
117
+ let y = rr * st * cos(th);
118
+ let z = rr * st * sin(th);
119
+ let r = 0.018 + 0.0012 * s;
120
+ }
121
+ glow(shellGold, 1);
122
+
123
+ cloud3(shellPink, 9200, #ff79c6, 0.075) {
124
+ let per = 4600;
125
+ let s = floor(i / per);
126
+ let j = i - s * per;
127
+ let k = s + 8;
128
+ let sr = 0.105 * exp(0.218 * k);
129
+ let ct = 1 - 2 * rand2(j, k + 73.1);
130
+ let st = sqrt(1 - ct * ct);
131
+ let th = tau * rand2(j, k + 75.7);
132
+ let rr = sr + 0.012 * (rand2(i, k + 4.2) - 0.5);
133
+ let x = sr + rr * ct;
134
+ let y = rr * st * cos(th);
135
+ let z = rr * st * sin(th);
136
+ let r = 0.028;
137
+ }
138
+ glow(shellPink, 1);
139
+
140
+ cloud3(shellViolet, 10000, #c398ff, 0.065) {
141
+ let per = 5000;
142
+ let s = floor(i / per);
143
+ let j = i - s * per;
144
+ let k = s + 10;
145
+ let sr = 0.105 * exp(0.218 * k);
146
+ let ct = 1 - 2 * rand2(j, k + 83.1);
147
+ let st = sqrt(1 - ct * ct);
148
+ let th = tau * rand2(j, k + 85.7);
149
+ let rr = sr + 0.012 * (rand2(i, k + 4.2) - 0.5);
150
+ let x = sr + rr * ct;
151
+ let y = rr * st * cos(th);
152
+ let z = rr * st * sin(th);
153
+ let r = 0.030;
154
+ }
155
+ glow(shellViolet, 1);
156
+
157
+ cloud3(shellCyan, 16800, #b9ffff, 0.070) {
158
+ let per = 5600;
159
+ let s = floor(i / per);
160
+ let j = i - s * per;
161
+ let k = s + 12;
162
+ let sr = 0.105 * exp(0.218 * k);
163
+ let ct = 1 - 2 * rand2(j, k + 93.1);
164
+ let st = sqrt(1 - ct * ct);
165
+ let th = tau * rand2(j, k + 95.7);
166
+ let rr = sr + 0.012 * (rand2(i, k + 4.2) - 0.5);
167
+ let x = sr + rr * ct;
168
+ let y = rr * st * cos(th);
169
+ let z = rr * st * sin(th);
170
+ let r = 0.032;
171
+ }
172
+ glow(shellCyan, 1);
173
+
174
+ // Dense gold dust at the shared tangent becomes the white-hot crescent when
175
+ // viewed from the side and the tiny luminous bullseye when viewed end-on.
176
+ cloud3(junction, 7600, #ffd45a, 0.14) {
177
+ let ct = 1 - 2 * rand2(i, 103.1);
178
+ let st = sqrt(1 - ct * ct);
179
+ let th = tau * rand2(i, 105.7);
180
+ let rr = 0.095 * (0.45 + 0.55 * rand2(i, 71.2));
181
+ let x = 0.02 + rr * ct;
182
+ let y = rr * st * cos(th);
183
+ let z = rr * st * sin(th);
184
+ let r = 0.026;
185
+ }
186
+ glow(junction, 1);
187
+
188
+ orbit3(720, 0, 32, 20, linear);
@@ -0,0 +1,37 @@
1
+ // Extrude & CSG — turn 2D shapes into 3D solids. `extrude3` sweeps any 2D
2
+ // fillable shape (or a boolean region) straight up; extruding a union/
3
+ // difference/intersect gives constructive-solid-geometry solids. The 2D
4
+ // source shapes are auto-hidden — they're just the cross-section recipe.
5
+ //
6
+ // manic examples/extrude3.manic
7
+ // manic examples/extrude3.manic --record out --fps 60
8
+
9
+ title("Extrude & CSG");
10
+ canvas(1280, 720);
11
+ template("terminal");
12
+
13
+ camera3((9, -11, 7), (0, 0, 0.8), 45);
14
+ grid3(floor, (0, 0, 0), 6, 1);
15
+ color(floor, dim);
16
+ axes3(world, (0, 0, 0), 3);
17
+
18
+ // CSG: a square plate MINUS a circular hole → an extruded plate-with-a-hole
19
+ rect(plate, (0, 0), 3, 3);
20
+ circle(hole, (0, 0), 0.9);
21
+ difference(cut, plate, hole);
22
+ extrude3(block, cut, 1.0, (-3.5, 0, 0.6));
23
+ color(block, cyan);
24
+
25
+ // arbitrary concave polygon: a union of two rects → an L-beam, extruded
26
+ rect(la, (0, 0), 2.4, 0.8);
27
+ rect(lb, (-0.8, 0.8), 0.8, 2.4);
28
+ union(lshape, la, lb);
29
+ extrude3(ell, lshape, 0.9, (3.5, 0, 0.55));
30
+ color(ell, magenta);
31
+
32
+ // a plain shape extrudes just as happily (a hexagon via a sector sweep)
33
+ sector(hexface, (0, 0), 1.2, 0, 360);
34
+ extrude3(disc, hexface, 0.5, (0, 3.5, 0.3));
35
+ color(disc, gold);
36
+
37
+ orbit3(60, 24, 17, 8, smooth);
@@ -0,0 +1,69 @@
1
+ title("A Flowchart That Runs — the Factorial Loop");
2
+ canvas("16:9");
3
+ template("paper");
4
+
5
+ let u = (w+h-abs(w-h))/1440;
6
+ watermark(mark, (w*0.15, h*0.04), "Made With Manic");
7
+ text(kicker, (cx, h*0.06), "DIAGRAMS · FLOWCHART · AUTO-LAID");
8
+ text(headline, (cx, h*0.12), "A flowchart that runs");
9
+ size(kicker, 15*u); color(kicker, dim); bold(kicker);
10
+ size(headline, 26*u); bold(headline); wrap(headline, w*0.86);
11
+
12
+ // `flowchart(fc)` ranks nodes by their connections, auto-fits, and auto-orients:
13
+ // a shallow flow like this stays top-down on its own. No coordinates, no direction
14
+ // to choose. Node shapes are string kinds.
15
+ flowchart(fc);
16
+ node(start, fc, "terminator", "start");
17
+ node(rd, fc, "io", "read n");
18
+ node(init, fc, "process", "f=1 i=1");
19
+ node(dec, fc, "decision", "i <= n?");
20
+ node(body, fc, "process", "f=f*i i=i+1");
21
+ node(out, fc, "io", "print f");
22
+ node(fin, fc, "terminator", "end");
23
+
24
+ connect(e1, start, rd);
25
+ connect(e2, rd, init);
26
+ connect(e3, init, dec);
27
+ connect(e4, dec, body); // keep looping
28
+ connect(e5, dec, out); // exit
29
+ connect(e6, body, dec, orthogonal, right, right); // loop back up the side
30
+ connect(e7, out, fin);
31
+
32
+ color(e4, cyan); color(e4.hot, cyan);
33
+ color(e5, lime); color(e5.hot, lime);
34
+ color(e6, gold); color(e6.hot, gold);
35
+ annotate(e4, "yes"); annotate(e5, "no"); annotate(e6, "loop");
36
+
37
+ // A colour key stands in for narration — the diagram explains itself.
38
+ text(k1, (w*0.34, h*0.93), "— continue"); size(k1, 14*u); color(k1, cyan); bold(k1);
39
+ text(k2, (w*0.50, h*0.93), "— exit"); size(k2, 14*u); color(k2, lime); bold(k2);
40
+ text(k3, (w*0.66, h*0.93), "— loop back"); size(k3, 14*u); color(k3, gold); bold(k3);
41
+
42
+ request(tok, start, "n = 3");
43
+ hidden(fc.nodes);
44
+ hidden(tok.parts);
45
+
46
+ step("shape") {
47
+ stagger(0.07) {
48
+ show(start, 0.3); show(rd, 0.3); show(init, 0.3); show(dec, 0.3);
49
+ show(body, 0.3); show(out, 0.3); show(fin, 0.3);
50
+ }
51
+ }
52
+ wait(0.2);
53
+
54
+ step("run") {
55
+ seq {
56
+ show(tok.parts, 0.2);
57
+ route(tok, e1, 0.4, smooth); route(tok, e2, 0.4, smooth); route(tok, e3, 0.4, smooth);
58
+ route(tok, e4, 0.4, smooth); route(tok, e6, 0.5, smooth);
59
+ route(tok, e4, 0.4, smooth); route(tok, e6, 0.5, smooth);
60
+ route(tok, e4, 0.4, smooth); route(tok, e6, 0.5, smooth);
61
+ route(tok, e5, 0.4, smooth); route(tok, e7, 0.4, smooth);
62
+ }
63
+ }
64
+ wait(0.3);
65
+
66
+ step("takeaway") {
67
+ seq { pulse(fin, 0.7); pulse(fin, 0.7); }
68
+ }
69
+ wait(1.0);
@@ -0,0 +1,57 @@
1
+ // fibonacci-sphere — an educational cloud3 lesson: how do you scatter N points
2
+ // *evenly* over a sphere? Naive latitude/longitude clumps at the poles; the fix
3
+ // is the golden angle. This builds the answer live — 2000 points placed by the
4
+ // exact closed-form spiral, projected in 3D, with the derivation typeset beside
5
+ // it in LaTeX. The picture and the maths are the same object, which is the point.
6
+ //
7
+ // manic examples/fibonacci-sphere.manic
8
+ title("The Fibonacci sphere");
9
+ canvas("16:9");
10
+ template("black");
11
+
12
+ camera3((10, -10, 6), (0, 0, 0), 40, perspective);
13
+
14
+ // --- headings (caption centres the row; text() would left-anchor and clip) --
15
+ caption(head, "Even points on a sphere", (640, 52), 38);
16
+ caption(ask, "even heights, then a golden-angle turn each step", (640, 108), 22);
17
+ hidden(head);
18
+ hidden(ask);
19
+
20
+ // --- the sphere: the Fibonacci spiral, breathing-free so it reads as a lesson
21
+ cloud3(orb, 2000, #ffffff, 0.97) {
22
+ let ct = 1 - 2 * (i + 0.5) / 2000; // z_i: cos(theta), evenly spaced in [-1,1]
23
+ let st = sqrt(1 - ct * ct); // r_i: ring radius at that height
24
+ let th = i * 2.39996; // theta_i: i * the golden angle
25
+ let x = 3 * st * cos(th + t * 0.25); // (slow spin so it reads as a solid)
26
+ let y = 3 * st * sin(th + t * 0.25);
27
+ let z = 3 * ct;
28
+ let r = 0.05;
29
+ let hue = mod(200 + i * 0.14, 360); // a cool→warm gradient down the spiral
30
+ }
31
+ untraced(orb);
32
+
33
+ // --- the derivation, typeset beside it ------------------------------------
34
+ equation(e1, (270, 300), `z_i = 1 - \dfrac{2i+1}{N}`, 34);
35
+ equation(e2, (270, 410), `r_i = \sqrt{1 - z_i^{2}}`, 34);
36
+ equation(e3, (270, 520), `\theta_i = i\,\varphi`, 34);
37
+ equation(e4, (300, 640), `\varphi = \pi(3-\sqrt5) \approx 137.5^\circ`, 30);
38
+ hidden(e1);
39
+ hidden(e2);
40
+ hidden(e3);
41
+ hidden(e4);
42
+
43
+ // --- lesson beats ---------------------------------------------------------
44
+ show(head);
45
+ wait(0.8);
46
+ show(ask);
47
+ wait(1.2);
48
+ draw(orb, 3); // the sphere grows in as the points appear
49
+ wait(0.6);
50
+ show(e1); // even heights
51
+ wait(1.6);
52
+ show(e2); // the ring radius at each height
53
+ wait(1.6);
54
+ show(e3); // turn a little each step...
55
+ wait(1.4);
56
+ show(e4); // ...by the golden angle: the never-repeating turn
57
+ wait(3.5);