@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,33 @@
1
+ title("A limit — the value a curve heads toward");
2
+ canvas("16:9");
3
+
4
+ let ox = cx - 120;
5
+ let oy = cy;
6
+
7
+ text(hdr, (cx, 54), "sin(x) / x is undefined at 0 — but it heads straight for 1");
8
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr); hidden(hdr);
9
+
10
+ axes(ax, (ox, oy), 620, 300, 1);
11
+ color(ax, dim); untraced(ax);
12
+
13
+ // sin(x)/x — a removable hole at x = 0, where the limit is 1
14
+ plot(f, (ox, oy), 150, 220, "sin(x)/x", (-6.2, 6.2));
15
+ color(f, cyan); stroke(f, 4); untraced(f);
16
+
17
+ // the limit at x -> 0: open circle at (0, 1), guides, value, and an approaching dot
18
+ limit(lim, f, 0);
19
+ color(lim, gold);
20
+
21
+ text(cap, (cx, h - 54), "slide the point in — f(x) closes on the open circle");
22
+ size(cap, 20); color(cap, dim); display(cap); hidden(cap);
23
+
24
+ // ---- timeline ----
25
+ show(hdr, 0.6);
26
+ draw(ax, 0.7);
27
+ draw(f, 1.6);
28
+ wait(0.3);
29
+ show(lim, 0.5);
30
+ show(cap, 0.4);
31
+ wait(0.3);
32
+ // walk the point toward x = 0 from the left — it approaches the open circle
33
+ to(lim, x, 0, 3.5);
@@ -0,0 +1,50 @@
1
+ // ============================================================================
2
+ // linear-algebra-3d.manic — Linear algebra in 3D (a lesson)
3
+ // ----------------------------------------------------------------------------
4
+ // The 3-D companion to linear-algebra.manic. One matrix, two lenses, one
5
+ // orbiting stage:
6
+ // 1. a 3x3 matrix TRANSFORMS space — the unit cube becomes a parallelepiped
7
+ // whose VOLUME is the determinant (linmap3)
8
+ // 2. its EIGENVECTORS are the invariant axes that only stretch (eigen3)
9
+ //
10
+ // Both use the same A = [[1,0,0],[0,3,1],[0,1,3]] (det = 8; eigenvalues 1,2,4),
11
+ // so the two views describe the very same matrix.
12
+ // ============================================================================
13
+
14
+ title("Linear algebra in 3D");
15
+ canvas("16:9");
16
+
17
+ camera3((12, 9.5, 10), (0.4, 1.6, 1.6), 40);
18
+ grid3(floor, (0, 0, 0), 4, 1); color(floor, dim); opacity(floor, 0.3);
19
+
20
+ // A = [[1,0,0],[0,3,1],[0,1,3]] — det 8, eigenvalues 1, 2, 4
21
+ linmap3(lm, (0, 0, 0), 1, 0, 0, 0, 3, 1, 0, 1, 3);
22
+ eigen3(ev, (0, 0, 0), 1, 0, 0, 0, 3, 1, 0, 1, 3);
23
+ // the eigen-axes wait until chapter 2
24
+ hidden(ev.axis0); hidden(ev.axis1); hidden(ev.axis2);
25
+ hidden(ev.l0); hidden(ev.l1); hidden(ev.l2);
26
+
27
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
28
+
29
+ // ---- 1. the matrix as a transformation of space ----
30
+ section("A matrix in 3D");
31
+ say(cap, "a 3x3 matrix sends the unit cube to a parallelepiped — its columns", 0.5);
32
+ orbit3(50, 26, 13, 4, smooth);
33
+ say(cap, "the volume it encloses is the determinant: det = 8, so space grew 8x", 0.5);
34
+ orbit3(116, 30, 13, 4, smooth);
35
+ // clear the transformation view
36
+ fade(lm, 0.6); fade(lm.ref, 0.6);
37
+ fade(lm.i, 0.6); fade(lm.j, 0.6); fade(lm.k, 0.6);
38
+ fade(lm.li, 0.6); fade(lm.lj, 0.6); fade(lm.lk, 0.6); fade(lm.val, 0.6);
39
+ wait(0.3);
40
+
41
+ // ---- 2. the same matrix, through its eigenvectors ----
42
+ say(cap, "", 0.2);
43
+ section("Eigenvectors");
44
+ say(cap, "three special directions only STRETCH when A acts — the eigenvectors", 0.5);
45
+ show(ev.axis0, 0.5); show(ev.axis1, 0.5); show(ev.axis2, 0.5);
46
+ show(ev.l0, 0.4); show(ev.l1, 0.4); show(ev.l2, 0.4);
47
+ orbit3(58, 24, 7, 4, smooth);
48
+ say(cap, "their stretch factors are the eigenvalues: 1, 2 and 4", 0.5);
49
+ orbit3(122, 32, 6.5, 4.5, smooth);
50
+ wait(0.5);
@@ -0,0 +1,115 @@
1
+ // ============================================================================
2
+ // linear-algebra.manic — Linear Algebra in five ideas (a lesson)
3
+ // ----------------------------------------------------------------------------
4
+ // A guided tour of the whole subject, not a feature demo. One stage, five
5
+ // chapters; chapters 1-3 view the SAME matrix A = [[2,1],[1,2]] through three
6
+ // lenses, so the ideas connect:
7
+ // 1. a matrix TRANSFORMS space (linmap)
8
+ // 2. the DETERMINANT is how area scales (determinant) -> det = 3
9
+ // 3. EIGENVECTORS only stretch (diagonalise) -> lambda = 3, 1
10
+ // 4. SOLVING A x = b (linsolve -> rref)
11
+ // 5. PROJECTION: the closest answer (project)
12
+ //
13
+ // Reveal recipe (works for lines, arrows, fills, and text alike, preserving
14
+ // each element's opacity): `untraced(tag)` at build time, `draw(tag)` to reveal,
15
+ // `fade(tag)` to clear before the next chapter. `tag` broadcasts to every entity
16
+ // carrying it (see the ergonomics in the manic guide).
17
+ // ============================================================================
18
+
19
+ title("Linear Algebra, in five ideas");
20
+ canvas("16:9");
21
+
22
+ let sx = cx;
23
+ let sy = cy + 44; // shared stage center
24
+ let u = 44;
25
+
26
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
27
+
28
+ // ---- build every chapter's visual up front, drawn-blank (untraced) ----
29
+ // A coordinate grid draws in with each chapter for consistent visual feedback.
30
+ // Chapters 1 & 3 bring their own (the deformed grid / the eigen-grid); chapters
31
+ // 2, 4, 5 get a plain reference grid that traces in at the start of the section.
32
+ plane(g2, (sx, sy), 176, 176, u); untraced(g2); // determinant — count the cells
33
+ plane(g4, (sx, sy), 240, 230, u); untraced(g4); // solving — read off (1, 3)
34
+ plane(g5, (sx, sy), 200, 200, u); untraced(g5); // projection
35
+
36
+ // 1. transformation of A = [[2,1],[1,2]]
37
+ linmap(lm, (sx, sy), u, 2, 1, 1, 2);
38
+ untraced(lm);
39
+
40
+ // 2. determinant of the same A (parallelogram is the bare id `dt`)
41
+ determinant(dt, (sx, sy), u, 2, 1, 1, 2);
42
+ untraced(dt); untraced(dt.unit); untraced(dt.val);
43
+
44
+ // 3. eigenvectors / diagonalisation of the same A
45
+ diagonalise(dg, (sx, sy), u, 2, 1, 1, 2);
46
+ untraced(dg);
47
+
48
+ // 4a. a 2x2 system as two lines (solution dot is the bare id `sys`)
49
+ linsolve(sys, (sx, sy), u, 2, 1, 1, 3, 5, 10);
50
+ untraced(sys.r1); untraced(sys.r2); hidden(sys); hidden(sys.val);
51
+ // 4b. the same system reduced by elimination
52
+ rref(rr, "2 1 5 ; 1 3 10", (sx, sy - 24), 120, 60);
53
+ untraced(rr.lbrack); untraced(rr.rbrack);
54
+
55
+ // 5. projection of a vector onto a line
56
+ project(pj, (sx, sy), u, (1, 3), (3, 1));
57
+ untraced(pj);
58
+
59
+ // ============================ the lesson ==================================
60
+
61
+ section("Transformations");
62
+ draw(lm, 1.2);
63
+ say(cap, "a matrix sends every point to a new one — and it does so LINEARLY", 0.5);
64
+ wait(1.8);
65
+ say(cap, "the grid stays parallel and evenly spaced; i-hat, j-hat land on its columns", 0.5);
66
+ wait(2.2);
67
+ fade(lm, 0.6);
68
+ wait(0.3);
69
+
70
+ say(cap, "", 0.2);
71
+ section("The determinant");
72
+ draw(g2, 0.7);
73
+ draw(dt.unit, 0.5); draw(dt, 0.7); draw(dt.val, 0.4);
74
+ say(cap, "how much does it stretch area? the unit square becomes this parallelogram", 0.5);
75
+ wait(2.0);
76
+ say(cap, "that area IS the determinant = 3 — three grid cells; a flip would be negative", 0.5);
77
+ wait(2.2);
78
+ fade(dt, 0.6); fade(dt.unit, 0.6); fade(dt.val, 0.6); fade(g2, 0.6);
79
+ wait(0.3);
80
+
81
+ say(cap, "", 0.2);
82
+ section("Eigenvectors");
83
+ draw(dg, 1.2);
84
+ say(cap, "most vectors change direction — but a few only STRETCH: the eigenvectors", 0.5);
85
+ wait(2.2);
86
+ say(cap, "in their basis A is pure scaling: A = P D P^-1, D = diag(3, 1)", 0.5);
87
+ wait(2.2);
88
+ fade(dg, 0.6);
89
+ wait(0.3);
90
+
91
+ say(cap, "", 0.2);
92
+ section("Solving A x = b");
93
+ draw(g4, 0.7);
94
+ draw(sys.r1, 0.7); draw(sys.r2, 0.7);
95
+ show(sys, 0.4); show(sys.val, 0.4);
96
+ say(cap, "a system of equations is a set of lines; the solution is where they meet", 0.5);
97
+ wait(2.2);
98
+ fade(sys, 0.5); fade(sys.r1, 0.5); fade(sys.r2, 0.5); fade(sys.val, 0.5); fade(g4, 0.5);
99
+ say(cap, "elimination finds it by reducing [ A | b ] to the identity beside the answer", 0.5);
100
+ draw(rr.lbrack, 0.4); draw(rr.rbrack, 0.4);
101
+ show(rr.s0, 0.4); show(rr.op0, 0.3);
102
+ wait(1.6);
103
+ par { show(rr.s4, 0.5); fade(rr.s0, 0.5); } show(rr.op4, 0.4); fade(rr.op0, 0.3);
104
+ wait(2.0);
105
+ fade(rr.s4, 0.5); fade(rr.op4, 0.4); fade(rr.lbrack, 0.4); fade(rr.rbrack, 0.4);
106
+ wait(0.3);
107
+
108
+ say(cap, "", 0.2);
109
+ section("Projection");
110
+ draw(g5, 0.7);
111
+ draw(pj, 1.0);
112
+ say(cap, "when no exact answer exists, take the CLOSEST point of the subspace", 0.5);
113
+ wait(2.0);
114
+ say(cap, "the error is perpendicular — that principle IS least-squares, the best fit", 0.5);
115
+ wait(2.4);
@@ -0,0 +1,39 @@
1
+ title("What a matrix does to space");
2
+ canvas("16:9");
3
+
4
+ let ox = cx - 60;
5
+ let oy = cy + 40;
6
+
7
+ text(hdr, (cx, 54), "the matrix [[2,1],[1,2]] — grid, determinant, eigenvectors");
8
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr); hidden(hdr);
9
+
10
+ text(cap, (cx, h - 50), "");
11
+ size(cap, 22); color(cap, dim); display(cap);
12
+
13
+ // the plane deformed by the matrix (î, ĵ land on its columns)
14
+ linmap(lm, (ox, oy), 46, 2, 1, 1, 2, 2);
15
+
16
+ // the unit square's image — area = determinant
17
+ determinant(dt, (ox, oy), 46, 2, 1, 1, 2);
18
+ hidden(dt); hidden(dt.unit); hidden(dt.val);
19
+
20
+ // the two invariant directions (eigenvectors)
21
+ eigen(ev, (ox, oy), 46, 2, 1, 1, 2);
22
+ hidden(ev); hidden(ev.l0); hidden(ev.l1);
23
+
24
+ // ---- timeline ----
25
+ show(hdr, 0.6);
26
+ say(cap, "the matrix bends the grid; i-hat and j-hat land on its columns", 0.5);
27
+ wait(1.4);
28
+
29
+ say(cap, "the unit square maps to a parallelogram — its area IS the determinant", 0.5);
30
+ show(dt, 0.6);
31
+ show(dt.unit, 0.4);
32
+ show(dt.val, 0.5);
33
+ wait(1.4);
34
+
35
+ say(cap, "two directions only stretch, never turn: the eigenvectors", 0.5);
36
+ show(ev, 0.6);
37
+ show(ev.l0, 0.4);
38
+ show(ev.l1, 0.4);
39
+ wait(1.0);
@@ -0,0 +1,33 @@
1
+ // ============================================================================
2
+ // linear-map3.manic — a 3x3 matrix, in 3D (the 3-D echo of linear-map)
3
+ // ----------------------------------------------------------------------------
4
+ // `linmap3(id, (cx,cy,cz), a,b,c,d,e,f,g,h,i, [color])` applies the 3x3 matrix
5
+ // [[a,b,c],[d,e,f],[g,h,i]] to space: the unit cube (faint wireframe) becomes a
6
+ // parallelepiped, with basis arrows i/j/k landing on the matrix's COLUMNS. The
7
+ // volume it encloses IS the determinant (labelled) — it flips colour when the
8
+ // determinant is negative (orientation reversed) and collapses flat at det = 0.
9
+ //
10
+ // TO ADAPT: change the nine numbers. Try a shear (1,0.6,0, 0,1,0, 0,0,1) → det 1
11
+ // (volume unchanged), or swap two columns to make det negative (a reflection).
12
+ // ============================================================================
13
+
14
+ title("A 3x3 matrix, in 3D");
15
+ canvas("16:9");
16
+
17
+ camera3((7, 5.5, 6), (1, 1, 1), 40);
18
+ grid3(floor, (0, 0, 0), 4, 1); color(floor, dim); opacity(floor, 0.4);
19
+
20
+ // M = [[1.5,0.5,0],[0,1.5,0.5],[0.5,0,1.5]] — a skew + stretch, det = 3.5
21
+ linmap3(lm, (0, 0, 0), 1.5, 0.5, 0, 0, 1.5, 0.5, 0.5, 0, 1.5);
22
+
23
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
24
+
25
+ say(cap, "a 3x3 matrix sends the unit cube to a parallelepiped", 0.5);
26
+ orbit3(58, 26, 10, 4, smooth);
27
+
28
+ say(cap, "i, j, k land on its columns — where the three axes are sent", 0.5);
29
+ orbit3(116, 32, 10, 4, smooth);
30
+
31
+ say(cap, "the volume enclosed IS the determinant: det = 3.5, so space grew 3.5x", 0.5);
32
+ orbit3(60, 20, 9, 4.5, smooth);
33
+ wait(0.5);
@@ -0,0 +1,99 @@
1
+ // ============================================================================
2
+ // linear-system.manic — the geometry of solving & spanning (a template)
3
+ // ----------------------------------------------------------------------------
4
+ // Three side-by-side panels, each built up with animation:
5
+ // A) a 2x2 system as two lines meeting at the solution (linsolve)
6
+ // B) two independent vectors spanning the whole plane (span)
7
+ // C) two parallel vectors collapsing to a single line, rank 1 (span)
8
+ //
9
+ // HOW TO ADAPT THIS FILE:
10
+ // * Change the system in panel A: linsolve(sys, center, unit, a,b,c,d, e,f)
11
+ // draws a*x + b*y = e and c*x + d*y = f, meeting at the solution.
12
+ // * Change the vectors in panels B/C: span(id, center, unit, (vx,vy),(wx,wy)).
13
+ // * Everything is positioned from cx/cy/w/h + a per-panel origin (ax/bx/dx)
14
+ // and a `unit` = pixels-per-grid-step, so it scales cleanly. Grid point
15
+ // (gx,gy) maps to screen (origin_x + gx*u, origin_y - gy*u) [math y-up].
16
+ // * OPTIONAL: shade the closed region the two lines bound with the axes —
17
+ // see the commented `polygon(feasible, ...)` block in Panel A below.
18
+ // ============================================================================
19
+
20
+ title("Solving & spanning, visually");
21
+ canvas("16:9");
22
+
23
+ let y0 = cy + 20; // shared vertical center of the three panels
24
+ let ax = 280; // panel A origin x — a system as two lines
25
+ let bx = 640; // panel B origin x — span = the whole plane
26
+ let dx = 1000; // panel C origin x — parallel vectors collapse to a line
27
+ let u = 24; // pixels per grid unit (shared scale)
28
+
29
+ text(hdr, (cx, 46), "linear algebra: the geometry of solving & spanning");
30
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr);
31
+
32
+ // per-panel captions, revealed as each panel animates
33
+ text(la, (ax, 96), "a system = two lines"); size(la, 18); color(la, dim); display(la); hidden(la);
34
+ text(lb, (bx, 96), "span of two vectors"); size(lb, 18); color(lb, dim); display(lb); hidden(lb);
35
+ text(lc, (dx, 96), "parallel = rank 1"); size(lc, 18); color(lc, dim); display(lc); hidden(lc);
36
+
37
+ // faint coordinate backdrops (drawn once, static)
38
+ plane(pa, (ax, y0), 150, 190, u);
39
+ plane(pb, (bx, y0), 150, 190, u);
40
+ plane(pc, (dx, y0), 150, 190, u);
41
+
42
+ // ---- Panel A — the system 2x + y = 5 and x + 3y = 10, meeting at (1, 3) ----
43
+ linsolve(sys, (ax, y0), u, 2, 1, 1, 3, 5, 10);
44
+ untraced(sys.r1); untraced(sys.r2); // start blank, drawn in on the timeline
45
+ hidden(sys); hidden(sys.val); // the solution dot + its label fade in
46
+
47
+ // -- OPTIONAL: fill the closed area the two lines bound with the axes --------
48
+ // The two rows, the x-axis and the y-axis enclose a quadrilateral (the classic
49
+ // "feasible region"). Its corners, in grid coordinates, are:
50
+ // (0,0) -> (2.5,0) -> (1,3) -> (0,3.33)
51
+ // origin line1 hits the two line2 hits
52
+ // the x-axis lines meet the y-axis
53
+ // Uncomment to shade it (points are origin + gridX*u, origin - gridY*u):
54
+ //
55
+ // polygon(feasible,
56
+ // (ax, y0), // (0, 0) the origin
57
+ // (ax + 2.5*u, y0), // (2.5, 0) line 1 crosses the x-axis
58
+ // (ax + u, y0 - 3*u), // (1, 3) the two lines meet
59
+ // (ax, y0 - 3.333*u), // (0, 3.33) line 2 crosses the y-axis
60
+ // lime);
61
+ // opacity(feasible, 0.18); // translucent, so grid + lines show through
62
+ // z(feasible, -1); // sit behind the lines
63
+ // (for an animated reveal instead of a static fill, also `hidden(feasible);`
64
+ // above, then `to(feasible, opacity, 0.18, 0.6);` in Panel A's timeline.)
65
+ // ---------------------------------------------------------------------------
66
+
67
+ // ---- Panel B — two independent vectors reach every point: the whole plane --
68
+ span(fill, (bx, y0), u, (3, 1), (-1, 2));
69
+ untraced(fill.v); untraced(fill.w); // vectors draw in
70
+ hidden(fill.plane); // faint region fades to 0.14
71
+
72
+ // ---- Panel C — two parallel vectors only reach one line: rank 1 ------------
73
+ span(rank, (dx, y0), u, (2, 1), (-2, -1), gold);
74
+ untraced(rank.v); untraced(rank.w); untraced(rank.line);
75
+
76
+ text(cap, (cx, h - 44), ""); size(cap, 22); color(cap, dim); display(cap);
77
+
78
+ // ---- Panel A timeline: two lines draw in, then the solution pops -----------
79
+ show(la, 0.4);
80
+ say(cap, "two equations are two lines; where they cross solves the system", 0.5);
81
+ par { draw(sys.r1, 0.8); draw(sys.r2, 0.8); }
82
+ show(sys, 0.4);
83
+ show(sys.val, 0.4);
84
+ pulse(sys);
85
+ wait(1.6);
86
+
87
+ // ---- Panel B timeline: two vectors grow out, then the plane fills in -------
88
+ show(lb, 0.4);
89
+ say(cap, "two independent vectors combine to reach every point: the whole plane", 0.5);
90
+ par { draw(fill.v, 0.7); draw(fill.w, 0.7); }
91
+ to(fill.plane, opacity, 0.14, 0.9);
92
+ wait(1.6);
93
+
94
+ // ---- Panel C timeline: two parallel vectors, then their line (collapse) ----
95
+ show(lc, 0.4);
96
+ say(cap, "but parallel vectors only reach one line: rank 1, a collapse", 0.5);
97
+ par { draw(rank.v, 0.7); draw(rank.w, 0.7); }
98
+ draw(rank.line, 0.8);
99
+ wait(1.8);
@@ -0,0 +1,43 @@
1
+ // Linear Transformation — a 2x2 matrix bends the whole plane. The grid, the
2
+ // basis vectors i-hat / j-hat, and a sample point all carry the tag `pl`, so a
3
+ // single `transform` applies the matrix to everything at once (Manim's
4
+ // ApplyMatrix). Straight lines stay straight; the grid shears / rotates.
5
+ //
6
+ // manic examples/linear_transform.manic
7
+ // manic examples/linear_transform.manic --template blueprint
8
+
9
+ title("Linear Transformation");
10
+ canvas("16:9");
11
+
12
+ let ox = cx; let oy = cy;
13
+
14
+ text(head, (cx, 84), "a matrix bends the whole plane -- watch the grid");
15
+ display(head); color(head, cyan); size(head, 24); hidden(head);
16
+ text(cap, (cx, 672), ""); color(cap, dim); size(cap, 23);
17
+
18
+ // the plane (its grid + axes are all tagged `pl`)
19
+ plane(pl, (ox, oy), 580, 320, 60);
20
+ // basis vectors + a sample point, all tagged `pl` so they transform together
21
+ vector(vi, (ox, oy), (120, 0), cyan); stroke(vi, 4); tag(vi, pl);
22
+ vector(vj, (ox, oy), (0, -120), magenta); stroke(vj, 4); tag(vj, pl);
23
+ dot(mark, (ox + 180, oy - 100), 9); color(mark, lime); glow(mark, 1.6); tag(mark, pl);
24
+
25
+ // --- script ---
26
+ show(head, 0.5);
27
+ say(cap, "the identity grid, with i-hat (cyan) and j-hat (magenta)");
28
+ wait(0.7);
29
+
30
+ section("Shear");
31
+ say(cap, "shear: i-hat stays put, j-hat leans over");
32
+ transform(pl, (ox, oy), 1, 0.5, 0, 1, 1.4, smooth);
33
+ wait(0.8);
34
+
35
+ section("Undo");
36
+ say(cap, "the inverse matrix brings it right back");
37
+ transform(pl, (ox, oy), 1, -0.5, 0, 1, 1.4, smooth);
38
+ wait(0.6);
39
+
40
+ section("Rotate");
41
+ say(cap, "a rotation matrix turns the whole plane");
42
+ transform(pl, (ox, oy), 0.707, -0.707, 0.707, 0.707, 1.5, smooth);
43
+ wait(1.3);
@@ -0,0 +1,38 @@
1
+ // Linked List — classic anatomy, three variations. A node is a framed box split
2
+ // into compartments: singly `[ data | .next ]`, doubly `[ .prev | data | next. ]`,
3
+ // where a pointer field carries a dot its arrow starts from. `head` marks the
4
+ // entry node; the tail's `next` ends at `NULL` (singly/doubly) or curves back to
5
+ // the head (circular). `insert`/`remove` re-thread the pointers — no shifting.
6
+ //
7
+ // manic examples/linked_list.manic
8
+
9
+ title("Linked List");
10
+ canvas("16:9");
11
+
12
+ text(head, (cx, 56), "node = data + pointer field(s); head in, NULL or loop at the tail");
13
+ display(head); color(head, cyan); size(head, 24); hidden(head);
14
+ text(cap, (cx, 700), ""); color(cap, dim); size(cap, 24);
15
+
16
+ text(t1, (150, 160), "singly"); color(t1, lime); size(t1, 22);
17
+ text(t2, (150, 350), "doubly"); color(t2, lime); size(t2, 22);
18
+ text(t3, (150, 545), "circular"); color(t3, lime); size(t3, 22);
19
+
20
+ list(sa, "3 8 5", (cx, 160), singly, 64, 50);
21
+ list(da, "3 8 5", (cx, 350), doubly, 64, 50);
22
+ list(ca, "3 8 5", (cx, 545), circular, 64, 50);
23
+
24
+ show(head, 0.5);
25
+ say(cap, "three classic variations of the same idea");
26
+ wait(0.9);
27
+
28
+ section("Insert");
29
+ say(cap, "insert 7 after node 1 in the doubly list — pointers re-thread, no shift");
30
+ insert(da, 1, "7");
31
+ wait(0.6);
32
+
33
+ section("Remove");
34
+ say(cap, "remove the head of the singly list — the list re-points past it");
35
+ remove(sa, 0);
36
+
37
+ say(cap, "data + pointers: the whole family from one primitive");
38
+ wait(1.4);
@@ -0,0 +1,31 @@
1
+ // ============================================================================
2
+ // lln.manic — the Law of Large Numbers (stats Tier 3)
3
+ // ----------------------------------------------------------------------------
4
+ // `lln(id, (cx,cy), trials, [seed], [width], [height])` plots the running
5
+ // proportion of heads over many coin flips: wild at first, settling onto the
6
+ // true 0.5. Draws `{id}.curve`, the reference line `{id}.ref`, axis labels, and
7
+ // the final value. Seeded → the render is identical every time.
8
+ //
9
+ // TO ADAPT: change `trials` (more → tighter settling) or `seed` (a different
10
+ // reproducible run).
11
+ // ============================================================================
12
+
13
+ title("The Law of Large Numbers");
14
+ canvas("16:9");
15
+
16
+ lln(ll, (cx, cy + 10), 600, 3, 720, 300);
17
+ untraced(ll.curve); // the proportion traces in — watch it settle
18
+ hidden(ll.finallbl);
19
+ hidden(ll.truelbl);
20
+
21
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
22
+
23
+ say(cap, "flip a fair coin over and over; track the proportion of heads so far", 0.5);
24
+ show(ll.truelbl, 0.4);
25
+ wait(0.8);
26
+ say(cap, "early on it swings wildly — a few flips prove nothing", 0.5);
27
+ draw(ll.curve, 2.6);
28
+ wait(0.4);
29
+ say(cap, "but over many trials it settles onto the true probability, 0.5", 0.5);
30
+ show(ll.finallbl, 0.4);
31
+ wait(1.9);
@@ -0,0 +1,41 @@
1
+ // ============================================================================
2
+ // loop-cinematic.manic — the loop-the-loop as a movie (real physics inside)
3
+ // ----------------------------------------------------------------------------
4
+ // Same recipe as bullet-impact: build the real `looptrack` sim, aim the camera,
5
+ // sync the beats to the physics. A ball is released, races down the ramp, and
6
+ // the camera pushes in as it climbs the loop — the tension is REAL (it genuinely
7
+ // slows at the top, energy traded for height), then it clears and rockets out.
8
+ // ============================================================================
9
+
10
+ title("Loop the Loop");
11
+ canvas("16:9");
12
+
13
+ // the real curved-track physics — a modest release height, so it BARELY clears
14
+ // the top (H just over 2·r) — that's where the real tension lives
15
+ looptrack(lt, (500, 560), 1, 2.4, 95);
16
+ hidden(lt);
17
+
18
+ text(cap, (cx, h - 46), ""); color(cap, fg); size(cap, 24); bold(cap); display(cap); sticky(cap);
19
+
20
+ // ================= THE SCENE =================
21
+ cam((420, 400), 0.4, smooth); // frame the whole ramp + loop
22
+ say(cap, "release…", 0.4);
23
+ show(lt, 0.5);
24
+ wait(0.4);
25
+
26
+ // down the ramp, into the loop — the camera pushes in for the climb
27
+ par {
28
+ run(lt, 6.0);
29
+ seq {
30
+ say(cap, "released — down the ramp!", 0.3);
31
+ par { cam((500, 455), 3.0, smooth); zoom(1.35, 3.0, smooth); } // slow push through the descent + entry
32
+ say(cap, "up and over — will it clear the top?!", 0.3);
33
+ wait(1.7); // the climb + the crawl over the top
34
+ say(cap, "…MADE IT!", 0.25);
35
+ par { cam((470, 410), 1.3, smooth); zoom(1.1, 1.3, smooth); } // ease back as it rockets out
36
+ }
37
+ }
38
+
39
+ // the physics was the whole story
40
+ say(cap, "…real energy: fastest at the bottom, barely crawling over the top", 0.4);
41
+ wait(1.0);
@@ -0,0 +1,11 @@
1
+ // loop-track.manic — a ball rolls down a ramp and around a vertical loop-the-loop.
2
+ // `looptrack(id,[center],[radius],[height],[unit])`. A curved-track energy solver:
3
+ // v = √(2g(H−y)) along the arc, so the ball visibly SLOWS at the top. The release
4
+ // height must exceed 2·radius to clear the top. `energygraph` shows KE↔PE.
5
+ title("Loop-the-loop — down the ramp, around the loop");
6
+ canvas("16:9");
7
+ text(hdr, (cx, 44), "Release high enough (H > 2r) and the ball clears the top of the loop"); size(hdr, 21); color(hdr, cyan); bold(hdr); display(hdr);
8
+ looptrack(lt, (470, 560), 1, 3);
9
+ energygraph(lt, (1010, 330), 120);
10
+ text(cap, (cx, h - 32), "energy conserved: it trades kinetic for potential, slowest at the top of the loop"); size(cap, 15); color(cap, dim); display(cap);
11
+ run(lt, 5);
@@ -0,0 +1,55 @@
1
+ // lorenz-attractor — the classic strange attractor, drawn by the new
2
+ // `trajectory3`: a 3-D ODE integrated with RK4 into a single stateful path, hued
3
+ // by speed and orbited by the camera. This is NOT a `cloud` (those are pure
4
+ // f(i,t) fields with no memory); an attractor is a recurrence — each point
5
+ // depends on every step before it — which is exactly what `trajectory3` adds.
6
+ //
7
+ // The Lorenz system (Edward Lorenz, 1963): ẋ=σ(y−x), ẏ=x(ρ−z)−y, ż=xy−βz,
8
+ // with σ=10, ρ=28, β=8/3 — the birthplace of "the butterfly effect". Reproduced
9
+ // from a p5 art-tweet by @yuruyurau (https://x.com/yuruyurau); our own 3-D,
10
+ // speed-hued, annotated take.
11
+ //
12
+ // manic examples/lorenz-attractor.manic
13
+ title("The Lorenz attractor");
14
+ canvas("9:16");
15
+ template("black");
16
+
17
+ camera3((10, -10, 6), (0, 0, 0), 30, perspective);
18
+
19
+ // integrate the 3-D flow with RK4; coloured by speed automatically
20
+ trajectory3(butterfly,
21
+ "10*(y - x)", // ẋ = σ(y − x)
22
+ "x*(28 - z) - y", // ẏ = x(ρ − z) − y
23
+ "x*y - 2.667*z", // ż = xy − βz
24
+ (0.1, 0, 0), 13000);
25
+ untraced(butterfly);
26
+
27
+ // ---- textbook annotations ----
28
+ caption(head, "The Lorenz attractor", (540, 150), 40);
29
+ caption(sub, "deterministic chaos — one 3D flow", (540, 220), 24);
30
+ hidden(head);
31
+ hidden(sub);
32
+ equation(eq, (540, 1660),
33
+ `\dot x=\sigma(y{-}x),\;\; \dot y=x(\rho{-}z){-}y,\;\; \dot z=xy-\beta z`, 26);
34
+ caption(lab, "σ=10, ρ=28, β=8/3 — integrated by RK4", (540, 1746), 22);
35
+ hidden(eq);
36
+ hidden(lab);
37
+
38
+ // ---- run it: the path draws on while the camera orbits, annotations reveal ----
39
+ par {
40
+ seq {
41
+ orbit3(45, 26, 11, 0.05, linear); // snap to a start view
42
+ orbit3(405, 26, 11, 22, linear); // then a full slow revolution
43
+ }
44
+ draw(butterfly, 12); // the attractor traces itself on
45
+ seq {
46
+ wait(0.6);
47
+ show(head);
48
+ wait(1.6);
49
+ show(sub);
50
+ wait(2.0);
51
+ show(eq);
52
+ show(lab);
53
+ wait(25);
54
+ }
55
+ }
@@ -0,0 +1,43 @@
1
+ // lorenz-shells — the Lorenz attractor through a different lens, via the same
2
+ // `cloud … from flow(...)` bridge (σ=9, ρ=28, β=2). `flow` integrates the 3D ODE
3
+ // and hands each of 30,000 points the i-th state as hx/hy/hz; the cloud projects
4
+ // (hx, hz) through a polar lens fanned into 3 layers (mod i,3) into flowing shell
5
+ // forms. One bridge, endless dynamical-system art.
6
+ //
7
+ // Original idea by @yuruyurau (https://x.com/yuruyurau). Our hue'd, annotated
8
+ // take on a 9:16 Short — pure in (i, t), so it scrubs and records.
9
+ //
10
+ // manic examples/lorenz-shells.manic
11
+ title("The Lorenz flow, in shells");
12
+ canvas("9:16");
13
+ template("black");
14
+
15
+ cloud(shells, 30000, #ffffff, 0.55)
16
+ from flow("9*(y - x)", "x*(28 - z) - y", "x*y - 2*z", (6, 6, 6), 0.001) {
17
+ let q = hx*(sin(t*pi/80 - hx*hx/89 + mod(i,3))*0.8 + 1.2)*2 + 99;
18
+ let k = hz/39 + t*pi/960 + mod(i,3)*2;
19
+ let px = q*sin(k);
20
+ let py = q*cos(k);
21
+ let grow = tanh(t*0.5 + 0.12);
22
+ let x = 540 + px * 2.2 * grow;
23
+ let y = 960 + py * 2.2 * grow;
24
+ let hue = mod(mod(i,3)*90 + hz*4 + t*14, 360);
25
+ }
26
+
27
+ // ---- textbook annotations ----
28
+ caption(head, "The Lorenz flow, in shells", (540, 140), 36);
29
+ caption(sub, "integrate chaos, then project it", (540, 208), 22);
30
+ hidden(head);
31
+ hidden(sub);
32
+ equation(eq, (540, 1706), `\dot x=\sigma(y{-}x),\;\; \dot y=x(\rho{-}z){-}y,\;\; \dot z=xy-\beta z`, 24);
33
+ caption(lab, "same flow as lorenz-attractor, a new lens", (540, 1786), 20);
34
+ hidden(eq);
35
+ hidden(lab);
36
+
37
+ show(head);
38
+ wait(1.4);
39
+ show(sub);
40
+ wait(2.6);
41
+ show(eq);
42
+ show(lab);
43
+ wait(20);