@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.
- package/CONTRIBUTING.md +40 -0
- package/README.md +155 -0
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/abap-CRCWOmpq.js +1 -0
- package/dist/client/assets/apex-DnsZk_dE.js +1 -0
- package/dist/client/assets/azcli-1IWB1ccx.js +1 -0
- package/dist/client/assets/bat-DPkNLes8.js +1 -0
- package/dist/client/assets/bicep-Corcdgou.js +2 -0
- package/dist/client/assets/cameligo-CGrWLZr3.js +1 -0
- package/dist/client/assets/clojure-D9WOWImG.js +1 -0
- package/dist/client/assets/codicon-CgENjH2v.ttf +0 -0
- package/dist/client/assets/coffee-B7EJu28W.js +1 -0
- package/dist/client/assets/cpp-SEyurbux.js +1 -0
- package/dist/client/assets/csharp-BoL64M5l.js +1 -0
- package/dist/client/assets/csp-C46ZqvIl.js +1 -0
- package/dist/client/assets/css-DQU6DXDx.js +3 -0
- package/dist/client/assets/cssMode-CtRONlr8.js +4 -0
- package/dist/client/assets/cypher-D84EuPTj.js +1 -0
- package/dist/client/assets/dart-D8lhlL1r.js +1 -0
- package/dist/client/assets/dockerfile-DLk6rpji.js +1 -0
- package/dist/client/assets/ecl-BO6FnfXk.js +1 -0
- package/dist/client/assets/editor.worker-CZyr7Ur9.js +26 -0
- package/dist/client/assets/elixir-BRjLKONM.js +1 -0
- package/dist/client/assets/flow9-Cac8vKd7.js +1 -0
- package/dist/client/assets/freemarker2-BTSNJUl8.js +3 -0
- package/dist/client/assets/fsharp-fd1GTHhf.js +1 -0
- package/dist/client/assets/go-O9LJTZXk.js +1 -0
- package/dist/client/assets/graphql-LQdxqEYJ.js +1 -0
- package/dist/client/assets/handlebars-qkUBjVg6.js +1 -0
- package/dist/client/assets/hcl-DxDQ3s82.js +1 -0
- package/dist/client/assets/html-pguqE00h.js +1 -0
- package/dist/client/assets/htmlMode-BCCLuk2F.js +4 -0
- package/dist/client/assets/index-BFrMLHHu.css +1 -0
- package/dist/client/assets/index-CdBC-xgi.js +1250 -0
- package/dist/client/assets/ini-BvajGCUy.js +1 -0
- package/dist/client/assets/java-SYsfObOQ.js +1 -0
- package/dist/client/assets/javascript-ciDUXdez.js +1 -0
- package/dist/client/assets/jsonMode-BmkXC0tI.js +10 -0
- package/dist/client/assets/julia-DQXNmw_w.js +1 -0
- package/dist/client/assets/kotlin-qQ0MG-9I.js +1 -0
- package/dist/client/assets/less-GGFNNJHn.js +2 -0
- package/dist/client/assets/lexon-Canl7DCW.js +1 -0
- package/dist/client/assets/liquid-CwE4UIwf.js +1 -0
- package/dist/client/assets/lua-D28Ae8-K.js +1 -0
- package/dist/client/assets/m3-DPitgjJI.js +1 -0
- package/dist/client/assets/markdown-B811l8j2.js +1 -0
- package/dist/client/assets/mdx-K_9Emnjy.js +1 -0
- package/dist/client/assets/mips-CdjsipkG.js +1 -0
- package/dist/client/assets/msdax-CYqgjx_P.js +1 -0
- package/dist/client/assets/mysql-BHd6q0vd.js +1 -0
- package/dist/client/assets/objective-c-B1aVtJYH.js +1 -0
- package/dist/client/assets/pascal-BhNW15KB.js +1 -0
- package/dist/client/assets/pascaligo-5jv8CcQD.js +1 -0
- package/dist/client/assets/perl-DlYyT36c.js +1 -0
- package/dist/client/assets/pgsql-Dy0bjov7.js +1 -0
- package/dist/client/assets/php-120yhfDK.js +1 -0
- package/dist/client/assets/pla-CjnFlu4u.js +1 -0
- package/dist/client/assets/postiats-CQpG440k.js +1 -0
- package/dist/client/assets/powerquery-DdJtto1Z.js +1 -0
- package/dist/client/assets/powershell-Bu_VLpJB.js +1 -0
- package/dist/client/assets/protobuf-IBS6jZEB.js +2 -0
- package/dist/client/assets/pug-kFxLfcjb.js +1 -0
- package/dist/client/assets/python-BzIc0EVe.js +1 -0
- package/dist/client/assets/qsharp-q7JyzKFN.js +1 -0
- package/dist/client/assets/r-BIFz-_sK.js +1 -0
- package/dist/client/assets/razor-lXZl6dtu.js +1 -0
- package/dist/client/assets/redis-CHOsPHWR.js +1 -0
- package/dist/client/assets/redshift-CBifECDb.js +1 -0
- package/dist/client/assets/restructuredtext-CghPJEOS.js +1 -0
- package/dist/client/assets/ruby-CYWGW-b1.js +1 -0
- package/dist/client/assets/rust-DMDD0SHb.js +1 -0
- package/dist/client/assets/sb-BYAiYHFx.js +1 -0
- package/dist/client/assets/scala-Bqvq8jcR.js +1 -0
- package/dist/client/assets/scheme-Dhb-2j9p.js +1 -0
- package/dist/client/assets/scss-CTwUZ5N7.js +3 -0
- package/dist/client/assets/shell-CsDZo4DB.js +1 -0
- package/dist/client/assets/solidity-CME5AdoB.js +1 -0
- package/dist/client/assets/sophia-RYC1BQQz.js +1 -0
- package/dist/client/assets/sparql-KEyrF7De.js +1 -0
- package/dist/client/assets/sql-BdTr02Mf.js +1 -0
- package/dist/client/assets/st-C7iG7M4S.js +1 -0
- package/dist/client/assets/swift-D7IUmUK8.js +1 -0
- package/dist/client/assets/systemverilog-DgMryOEJ.js +1 -0
- package/dist/client/assets/tcl-PloMZuKG.js +1 -0
- package/dist/client/assets/tsMode-BAXmgo_t.js +11 -0
- package/dist/client/assets/twig-BfRIq3la.js +1 -0
- package/dist/client/assets/typescript-Cdf8nS1n.js +1 -0
- package/dist/client/assets/typespec-CzxlYoT_.js +1 -0
- package/dist/client/assets/vb-BwAE3J76.js +1 -0
- package/dist/client/assets/wgsl-B_1kOXbF.js +298 -0
- package/dist/client/assets/xml-DGyPgYnj.js +1 -0
- package/dist/client/assets/yaml-Dqv3HtbL.js +1 -0
- package/dist/client/index.html +14 -0
- package/dist/client/manic-logo.png +0 -0
- package/dist/client/wasm/manic_lang.d.ts +74 -0
- package/dist/client/wasm/manic_lang.js +302 -0
- package/dist/client/wasm/manic_lang_bg.wasm +0 -0
- package/dist/client/wasm/manic_lang_bg.wasm.d.ts +13 -0
- package/dist/server/agentProtocol.d.ts +131 -0
- package/dist/server/agentProtocol.js +21 -0
- package/dist/server/agentProtocol.js.map +1 -0
- package/dist/server/agentRuns.d.ts +46 -0
- package/dist/server/agentRuns.js +138 -0
- package/dist/server/agentRuns.js.map +1 -0
- package/dist/server/agentThreads.d.ts +20 -0
- package/dist/server/agentThreads.js +205 -0
- package/dist/server/agentThreads.js.map +1 -0
- package/dist/server/aiSecrets.d.ts +21 -0
- package/dist/server/aiSecrets.js +68 -0
- package/dist/server/aiSecrets.js.map +1 -0
- package/dist/server/app.d.ts +34 -0
- package/dist/server/app.js +804 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/assets.d.ts +34 -0
- package/dist/server/assets.js +659 -0
- package/dist/server/assets.js.map +1 -0
- package/dist/server/candidateFix.d.ts +28 -0
- package/dist/server/candidateFix.js +111 -0
- package/dist/server/candidateFix.js.map +1 -0
- package/dist/server/cli.d.ts +2 -0
- package/dist/server/cli.js +118 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/diagnostics.d.ts +13 -0
- package/dist/server/diagnostics.js +73 -0
- package/dist/server/diagnostics.js.map +1 -0
- package/dist/server/engineCheck.d.ts +7 -0
- package/dist/server/engineCheck.js +60 -0
- package/dist/server/engineCheck.js.map +1 -0
- package/dist/server/engineInstall.d.ts +34 -0
- package/dist/server/engineInstall.js +228 -0
- package/dist/server/engineInstall.js.map +1 -0
- package/dist/server/enginePaths.d.ts +3 -0
- package/dist/server/enginePaths.js +76 -0
- package/dist/server/enginePaths.js.map +1 -0
- package/dist/server/folderPicker.d.ts +1 -0
- package/dist/server/folderPicker.js +54 -0
- package/dist/server/folderPicker.js.map +1 -0
- package/dist/server/manicAgent.d.ts +75 -0
- package/dist/server/manicAgent.js +476 -0
- package/dist/server/manicAgent.js.map +1 -0
- package/dist/server/manicEnv.d.ts +18 -0
- package/dist/server/manicEnv.js +64 -0
- package/dist/server/manicEnv.js.map +1 -0
- package/dist/server/promptStore.d.ts +11 -0
- package/dist/server/promptStore.js +85 -0
- package/dist/server/promptStore.js.map +1 -0
- package/dist/server/renderJobs.d.ts +54 -0
- package/dist/server/renderJobs.js +290 -0
- package/dist/server/renderJobs.js.map +1 -0
- package/dist/server/settings.d.ts +40 -0
- package/dist/server/settings.js +262 -0
- package/dist/server/settings.js.map +1 -0
- package/dist/server/smartDraw.d.ts +7 -0
- package/dist/server/smartDraw.js +88 -0
- package/dist/server/smartDraw.js.map +1 -0
- package/dist/server/workspace.d.ts +27 -0
- package/dist/server/workspace.js +172 -0
- package/dist/server/workspace.js.map +1 -0
- package/examples/.manic-output/40b6f3b9-7638-4c0e-bb4f-570d45d1b225/job.json +26 -0
- package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/job.json +26 -0
- package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/markers.json +13 -0
- package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/out.mp4 +0 -0
- package/examples/.manic-workbench-threads/thread_3ce7448a13f64f9e887d1bc8106a97a8.json +45 -0
- package/examples/.manic-workbench-threads/thread_d494cda29249477591056234719e4a3a.json +21 -0
- package/examples/.manic-workbench-threads/thread_e98ebdc225184ea5b8ddda8b44541f63.json +29 -0
- package/examples/README.md +35 -0
- package/examples/a-story-1.manic +222 -0
- package/examples/a-story.manic +100 -0
- package/examples/achromat-cinematic.manic +105 -0
- package/examples/achromat.manic +32 -0
- package/examples/aes-decrypt.manic +359 -0
- package/examples/aes-encrypt.manic +359 -0
- package/examples/aes-round.manic +70 -0
- package/examples/aes-story.manic +622 -0
- package/examples/ai-story.manic +118 -0
- package/examples/analysis.manic +53 -0
- package/examples/archimedes_pi.manic +89 -0
- package/examples/area_under_curve.manic +131 -0
- package/examples/art-rakkan.manic +69 -0
- package/examples/aspheric-lens.manic +32 -0
- package/examples/astronomical-watch.manic +96 -0
- package/examples/asymptote-randomwalk3-reference.manic +58 -0
- package/examples/asymptote-tiling-reference.manic +65 -0
- package/examples/aws-clustered-web-services.manic +186 -0
- package/examples/aws-event-processing-clusters-poc.manic +97 -0
- package/examples/aws-three-tier-web-application.manic +134 -0
- package/examples/band.manic +43 -0
- package/examples/banner.manic +37 -0
- package/examples/bayes.manic +27 -0
- package/examples/bellcurve.manic +41 -0
- package/examples/bfs_dfs.manic +35 -0
- package/examples/block-tackle.manic +26 -0
- package/examples/bloom-scope.manic +172 -0
- package/examples/boolean.manic +46 -0
- package/examples/boxplot-wave.manic +93 -0
- package/examples/boxplot.manic +43 -0
- package/examples/brace.manic +46 -0
- package/examples/brachistochrone-annotated.manic +51 -0
- package/examples/brachistochrone.manic +27 -0
- package/examples/bubble_sort.manic +41 -0
- package/examples/bullet-block-annotated.manic +48 -0
- package/examples/bullet-block.manic +11 -0
- package/examples/bullet-impact.manic +65 -0
- package/examples/bungee.manic +9 -0
- package/examples/c4-internet-banking-components.manic +33 -0
- package/examples/c4-internet-banking-containers.manic +29 -0
- package/examples/c4-internet-banking.manic +26 -0
- package/examples/c4-story.manic +171 -0
- package/examples/c4-test.manic +52 -0
- package/examples/c4-zoom.manic +69 -0
- package/examples/calculus-demo.manic +129 -0
- package/examples/calculus-one.manic +288 -0
- package/examples/captions.manic +31 -0
- package/examples/car-suspension-annotated.manic +57 -0
- package/examples/car-suspension.manic +8 -0
- package/examples/cart-pendulum.manic +11 -0
- package/examples/charts-bar-line.manic +26 -0
- package/examples/charts-column-race.manic +19 -0
- package/examples/charts-gdp-race.manic +43 -0
- package/examples/charts-german-elections.manic +28 -0
- package/examples/charts-line-race.manic +21 -0
- package/examples/circle-in-three.manic +156 -0
- package/examples/circle-thirds-no-triangle.manic +161 -0
- package/examples/clip-window.manic +34 -0
- package/examples/cloud-feathers.manic +50 -0
- package/examples/cloud-jellyfish-v2.manic +87 -0
- package/examples/cloud-jellyfish.manic +48 -0
- package/examples/cloud-kaleidoscope.manic +48 -0
- package/examples/cloud-koi.manic +51 -0
- package/examples/cloud-lissajous.manic +23 -0
- package/examples/cloud-medusae.manic +46 -0
- package/examples/cloud-phoenix.manic +49 -0
- package/examples/cloud-plumes.manic +47 -0
- package/examples/cloud-pottery.manic +104 -0
- package/examples/cloud-shells.manic +50 -0
- package/examples/cloud-starfield.manic +23 -0
- package/examples/cloud-wave-lattice.manic +23 -0
- package/examples/cloud-word.manic +31 -0
- package/examples/cloud3-ripple.manic +53 -0
- package/examples/cloud3-sphere.manic +26 -0
- package/examples/clt.manic +35 -0
- package/examples/collide-blocks-annotated.manic +45 -0
- package/examples/collide-blocks.manic +11 -0
- package/examples/compare-pendulum.manic +11 -0
- package/examples/complex-flowchart.manic +196 -0
- package/examples/compound-pulley.manic +25 -0
- package/examples/conics.manic +46 -0
- package/examples/coordinates.manic +52 -0
- package/examples/correlation.manic +35 -0
- package/examples/covariance.manic +30 -0
- package/examples/creator-affine-fern-growth.manic +72 -0
- package/examples/creator-bowl-to-saddle.manic +86 -0
- package/examples/creator-branch-counting-tree3.manic +77 -0
- package/examples/creator-chaos-game-fern.manic +72 -0
- package/examples/creator-circle-inversion-chain.manic +61 -0
- package/examples/creator-convex-hull-depth.manic +59 -0
- package/examples/creator-coordinate-worlds.manic +182 -0
- package/examples/creator-ellipse-reflection-property.manic +59 -0
- package/examples/creator-free-kicks.manic +261 -0
- package/examples/creator-geometry-language-showcase.manic +259 -0
- package/examples/creator-geometry-morph-promo.manic +151 -0
- package/examples/creator-heightmap-world.manic +130 -0
- package/examples/creator-hilbert3-spatial-index.manic +203 -0
- package/examples/creator-how-rocket-launch-works.manic +192 -0
- package/examples/creator-implicit-surface-parameterized.manic +51 -0
- package/examples/creator-incenter-dissection.manic +56 -0
- package/examples/creator-lattice-paths.manic +118 -0
- package/examples/creator-line-inversion.manic +49 -0
- package/examples/creator-lsystem-fractal-curve.manic +121 -0
- package/examples/creator-mandelbrot-escape-test.manic +58 -0
- package/examples/creator-monty-hall.manic +104 -0
- package/examples/creator-noise-story.manic +123 -0
- package/examples/creator-one-tile-pattern-story.manic +169 -0
- package/examples/creator-pathfinding.manic +82 -0
- package/examples/creator-point-to-plane-distance.manic +167 -0
- package/examples/creator-race-quiz.manic +76 -0
- package/examples/creator-randomwalk3-diffusion.manic +72 -0
- package/examples/creator-reflected-ellipse.manic +48 -0
- package/examples/creator-rule90-sierpinski.manic +64 -0
- package/examples/creator-three-shadows-of-a-curve.manic +48 -0
- package/examples/creator-trigonometry-one-angle.manic +307 -0
- package/examples/creator-v2-latex-algebra.manic +29 -0
- package/examples/creator-v2-latex-calculus.manic +37 -0
- package/examples/creator-v2-latex-physics.manic +29 -0
- package/examples/creator-v2-olympiad-geometry.manic +92 -0
- package/examples/creator-v2-options-socials.manic +21 -0
- package/examples/creator-v2-timers.manic +25 -0
- package/examples/creator-v2-timing-square.manic +25 -0
- package/examples/creator-v2-timing.manic +34 -0
- package/examples/creator-v2.manic +36 -0
- package/examples/creator-why-rockets-use-stages.manic +198 -0
- package/examples/creator-wrap-real-line.manic +51 -0
- package/examples/cubic-graphs.manic +432 -0
- package/examples/curve-features.manic +41 -0
- package/examples/definedmotion-fourier-gallery.manic +171 -0
- package/examples/derivative-of-ln-x.manic +194 -0
- package/examples/diagonalise.manic +56 -0
- package/examples/dijkstra.manic +29 -0
- package/examples/dimensions-unfold.manic +211 -0
- package/examples/disc-integration.manic +172 -0
- package/examples/double-incline.manic +9 -0
- package/examples/double-integral3.manic +43 -0
- package/examples/double-pendulum.manic +35 -0
- package/examples/double-spring.manic +9 -0
- package/examples/drop-mass.manic +25 -0
- package/examples/eigen3.manic +34 -0
- package/examples/equal_cuts.manic +44 -0
- package/examples/equation.manic +16 -0
- package/examples/equilateral.manic +57 -0
- package/examples/euler_line.manic +51 -0
- package/examples/exponential-shells.manic +188 -0
- package/examples/extrude3.manic +37 -0
- package/examples/factorial-flowchart.manic +69 -0
- package/examples/fibonacci-sphere.manic +57 -0
- package/examples/flow-lorenz.manic +47 -0
- package/examples/fourier-series-live-wave.manic +114 -0
- package/examples/fourier-square-wave-live.manic +114 -0
- package/examples/fractal_tree.manic +39 -0
- package/examples/frame3-grid-policies.manic +48 -0
- package/examples/ftc.manic +54 -0
- package/examples/function_graph.manic +54 -0
- package/examples/galton-board-process.manic +150 -0
- package/examples/gcp-clustered-web-services.manic +186 -0
- package/examples/gcp-message-collecting.manic +139 -0
- package/examples/geo-pythagoras-short.manic +119 -0
- package/examples/glsl-boxgrid.manic +105 -0
- package/examples/glsl-parameter.manic +30 -0
- package/examples/glsl-raymarch.manic +59 -0
- package/examples/glsl-shapes.manic +122 -0
- package/examples/gradient-descent-field.manic +116 -0
- package/examples/gradient-fastest-descent-shorts.manic +153 -0
- package/examples/gradient-fastest-descent.manic +125 -0
- package/examples/gradient-pendulum-shorts.manic +117 -0
- package/examples/gradient.manic +74 -0
- package/examples/graph.manic +45 -0
- package/examples/graph_moving.manic +67 -0
- package/examples/grid-astar.manic +15 -0
- package/examples/grid-life-soup.manic +31 -0
- package/examples/grid-life-zoo.manic +46 -0
- package/examples/grid-life.manic +19 -0
- package/examples/grid-wfc.manic +13 -0
- package/examples/growing-fractal-tree3.manic +58 -0
- package/examples/gun-shot.manic +82 -0
- package/examples/hashmap.manic +38 -0
- package/examples/heightmap3-world.manic +64 -0
- package/examples/heightmap3.manic +23 -0
- package/examples/hilbert-curve3-space-filling.manic +117 -0
- package/examples/hill_run.manic +71 -0
- package/examples/histogram.manic +43 -0
- package/examples/hotdog-taco.manic +147 -0
- package/examples/hue_wave.manic +35 -0
- package/examples/hypothesis.manic +32 -0
- package/examples/image.manic +29 -0
- package/examples/incircle_tangents.manic +64 -0
- package/examples/incline-bumper.manic +11 -0
- package/examples/incline-pulley.manic +11 -0
- package/examples/incline-showcase.manic +55 -0
- package/examples/inline-math.manic +16 -0
- package/examples/inscribed-angle-short.manic +56 -0
- package/examples/integral-sqrt-tanx.manic +255 -0
- package/examples/integrals.manic +274 -0
- package/examples/inverse-derivatives.manic +94 -0
- package/examples/k8s-cluster-components.manic +82 -0
- package/examples/k8s-stateful-architecture.manic +134 -0
- package/examples/k8s-three-tier.manic +146 -0
- package/examples/kapitza.manic +11 -0
- package/examples/latex-disintegration.manic +123 -0
- package/examples/lens-paper.manic +36 -0
- package/examples/lens-prescription.manic +33 -0
- package/examples/lens-system.manic +34 -0
- package/examples/lens.manic +31 -0
- package/examples/limit-infinity.manic +30 -0
- package/examples/limit.manic +33 -0
- package/examples/linear-algebra-3d.manic +50 -0
- package/examples/linear-algebra.manic +115 -0
- package/examples/linear-map.manic +39 -0
- package/examples/linear-map3.manic +33 -0
- package/examples/linear-system.manic +99 -0
- package/examples/linear_transform.manic +43 -0
- package/examples/linked_list.manic +38 -0
- package/examples/lln.manic +31 -0
- package/examples/loop-cinematic.manic +41 -0
- package/examples/loop-track.manic +11 -0
- package/examples/lorenz-attractor.manic +55 -0
- package/examples/lorenz-shells.manic +43 -0
- package/examples/lost-in-patterns.manic +149 -0
- package/examples/lsystem-asymptote-curves.manic +81 -0
- package/examples/manic-ml-activation-focus.manic +133 -0
- package/examples/manic-ml-cnn-edge-story.manic +102 -0
- package/examples/manic-ml-forward-pass.manic +93 -0
- package/examples/manic-ml-learning-step.manic +116 -0
- package/examples/manic-ml-logits-sampling.manic +112 -0
- package/examples/manic-ml-scalar-to-tensor.manic +143 -0
- package/examples/manic-ml-token-embedding.manic +110 -0
- package/examples/manic-ml-transformer-attention.manic +102 -0
- package/examples/manic-ml-transformer-block.manic +116 -0
- package/examples/manic-promo.manic +64 -0
- package/examples/map-attractor.manic +45 -0
- package/examples/mask-lens.manic +33 -0
- package/examples/matrix.manic +37 -0
- package/examples/matrix3.manic +101 -0
- package/examples/matrix_addition.manic +66 -0
- package/examples/matrix_addition_plane.manic +91 -0
- package/examples/maxwell-boltzmann-effusion-v2.manic +142 -0
- package/examples/maxwell-boltzmann-process.manic +86 -0
- package/examples/microservices-platform.manic +140 -0
- package/examples/molecule.manic +8 -0
- package/examples/morph-icons.manic +29 -0
- package/examples/morph.manic +29 -0
- package/examples/morph3.manic +49 -0
- package/examples/motion-flow-foundation.manic +148 -0
- package/examples/motion-graphics-v2-story.manic +189 -0
- package/examples/motion-graphics-v2.manic +81 -0
- package/examples/motion-graphics.manic +81 -0
- package/examples/multivariable3.manic +26 -0
- package/examples/mystory.manic +9 -0
- package/examples/newton.manic +39 -0
- package/examples/newtons-cradle.manic +10 -0
- package/examples/nine_point.manic +59 -0
- package/examples/noise-terrain.manic +16 -0
- package/examples/off-axis.manic +32 -0
- package/examples/onprem-advanced-web-service-v2.manic +196 -0
- package/examples/onprem-advanced-web-service.manic +175 -0
- package/examples/orthocenter.manic +63 -0
- package/examples/param3.manic +43 -0
- package/examples/parameter-journeys.manic +154 -0
- package/examples/parameterized-field-advection.manic +57 -0
- package/examples/parameterized-generated-families3.manic +83 -0
- package/examples/particles-flow.manic +61 -0
- package/examples/pascal-triangle.manic +92 -0
- package/examples/pendulum-annotated.manic +72 -0
- package/examples/pendulum-damped.manic +35 -0
- package/examples/pendulum.manic +38 -0
- package/examples/perfect-reel.manic +43 -0
- package/examples/pie.manic +41 -0
- package/examples/pieday.manic +113 -0
- package/examples/piston.manic +7 -0
- package/examples/popkorn-field.manic +38 -0
- package/examples/prism-cinematic.manic +36 -0
- package/examples/prism.manic +32 -0
- package/examples/probability.manic +57 -0
- package/examples/process-branching-dispatch.manic +71 -0
- package/examples/process-stream-observe.manic +54 -0
- package/examples/projection.manic +57 -0
- package/examples/prompt-test-10.manic +257 -0
- package/examples/prompt-test-11.manic +168 -0
- package/examples/prompt-test-12.manic +177 -0
- package/examples/prompt-test-13.manic +228 -0
- package/examples/prompt-test-14.manic +319 -0
- package/examples/prompt-test-15.manic +325 -0
- package/examples/prompt-test-16.manic +252 -0
- package/examples/prompt-test-2.manic +239 -0
- package/examples/prompt-test-3.manic +336 -0
- package/examples/prompt-test-4.manic +195 -0
- package/examples/prompt-test-5.manic +223 -0
- package/examples/prompt-test-6.manic +222 -0
- package/examples/prompt-test-7.manic +156 -0
- package/examples/prompt-test-8.manic +266 -0
- package/examples/prompt-test-9.manic +171 -0
- package/examples/prompt-test.manic +158 -0
- package/examples/pulley-annotated.manic +54 -0
- package/examples/pulley-paper.manic +52 -0
- package/examples/pulley-scale.manic +23 -0
- package/examples/pulley.manic +24 -0
- package/examples/quadratic-formula-continuity.manic +110 -0
- package/examples/quiz-euler.manic +52 -0
- package/examples/quiz-geometry-2.manic +107 -0
- package/examples/quiz-geometry.manic +108 -0
- package/examples/quiz-skins.manic +22 -0
- package/examples/raft-cm.manic +24 -0
- package/examples/ramp.manic +25 -0
- package/examples/ray-fan.manic +27 -0
- package/examples/raymarch-alpha.manic +39 -0
- package/examples/raymarch-boxgrid.manic +47 -0
- package/examples/raymarch-docker-latency.manic +74 -0
- package/examples/raymarch-metaballs.manic +37 -0
- package/examples/raymarch-sculpture.manic +39 -0
- package/examples/raymarch-shapes3.manic +31 -0
- package/examples/reactive-integral.manic +172 -0
- package/examples/reactive-math-journey.manic +185 -0
- package/examples/reactive-math-notation.manic +150 -0
- package/examples/reactive-multiformat.manic +130 -0
- package/examples/reactive-world.manic +111 -0
- package/examples/refraction-paper.manic +40 -0
- package/examples/refraction.manic +32 -0
- package/examples/resonance.manic +10 -0
- package/examples/rewrite-exponential-cubic.manic +141 -0
- package/examples/rewrite-integration.manic +199 -0
- package/examples/riemann_rainbow.manic +61 -0
- package/examples/riemann_readout.manic +61 -0
- package/examples/robot-arm.manic +25 -0
- package/examples/rref.manic +48 -0
- package/examples/second-law-thermodynamics.manic +385 -0
- package/examples/series-parallel-springs.manic +8 -0
- package/examples/serverless-processing.manic +145 -0
- package/examples/shader-cellular.manic +35 -0
- package/examples/shader-fractal.manic +45 -0
- package/examples/shader-fx.manic +34 -0
- package/examples/shader-glitch-grid.manic +55 -0
- package/examples/shader-parameter.manic +25 -0
- package/examples/shader-patterns.manic +37 -0
- package/examples/shader-plasma.manic +43 -0
- package/examples/shader-shapes-dsl.manic +46 -0
- package/examples/shader-shapes.manic +37 -0
- package/examples/shader-warp.manic +22 -0
- package/examples/shapes-howto.manic +411 -0
- package/examples/sine_wave.manic +42 -0
- package/examples/skew.manic +40 -0
- package/examples/smoke.rs +57 -0
- package/examples/solids3.manic +22 -0
- package/examples/some-story.manic +299 -0
- package/examples/spinning-cylinder-flow.manic +87 -0
- package/examples/spline.manic +21 -0
- package/examples/spot-diagram.manic +32 -0
- package/examples/spring-annotated.manic +60 -0
- package/examples/spring-chain.manic +11 -0
- package/examples/spring-damped.manic +33 -0
- package/examples/spring-incline.manic +10 -0
- package/examples/spring-paper.manic +46 -0
- package/examples/spring-pendulum.manic +14 -0
- package/examples/spring.manic +33 -0
- package/examples/sqrt-tanx.manic +217 -0
- package/examples/ssl-handshake-sdf.manic +116 -0
- package/examples/stack_queue.manic +53 -0
- package/examples/statistics.manic +60 -0
- package/examples/story-addressable-asset-cues.manic +71 -0
- package/examples/story-dependent-chain-history.manic +56 -0
- package/examples/story-living-dependency-cloud.manic +50 -0
- package/examples/story-time-varying-field3.manic +57 -0
- package/examples/story.manic +4 -0
- package/examples/string-art-breath.manic +70 -0
- package/examples/string-wave.manic +10 -0
- package/examples/summary.manic +48 -0
- package/examples/svg-howto.manic +172 -0
- package/examples/svg-import.manic +18 -0
- package/examples/systems-architecture-poc.manic +92 -0
- package/examples/systems-arrow-patterns.manic +151 -0
- package/examples/systems-foundation.manic +71 -0
- package/examples/systems-rabbitmq-consumers.manic +118 -0
- package/examples/table.manic +39 -0
- package/examples/table_braces.manic +54 -0
- package/examples/tangent-length-short.manic +57 -0
- package/examples/tangent.manic +29 -0
- package/examples/tangents.manic +54 -0
- package/examples/taylor.manic +44 -0
- package/examples/terminal_boot.manic +40 -0
- package/examples/test.manic +61 -0
- package/examples/text-guide.manic +304 -0
- package/examples/textbook-coordinate-worlds.manic +129 -0
- package/examples/textbook-doubly-list.manic +33 -0
- package/examples/textbook-function-to-solid.manic +126 -0
- package/examples/textbook-geometry-dimension-reduction.manic +129 -0
- package/examples/textbook-incline-fbd.manic +43 -0
- package/examples/textbook-length-area-volume.manic +137 -0
- package/examples/textbook-matrix-inverses.manic +172 -0
- package/examples/textbook-pulley.manic +35 -0
- package/examples/textbook-statistical-dimensions.manic +151 -0
- package/examples/textbook-tension.manic +39 -0
- package/examples/textbook-watermelon-sections.manic +216 -0
- package/examples/thales-semicircle-short.manic +53 -0
- package/examples/three-d-v2-lab.manic +83 -0
- package/examples/three-d-v2-story.manic +106 -0
- package/examples/three-d-v2.manic +69 -0
- package/examples/three_d.manic +39 -0
- package/examples/timing-v2-scene.manic +47 -0
- package/examples/trajectory.manic +28 -0
- package/examples/transform_copy.manic +35 -0
- package/examples/transforms.manic +54 -0
- package/examples/trapped-light-dimensions.manic +226 -0
- package/examples/tree-of-leaves.manic +215 -0
- package/examples/triangle.manic +68 -0
- package/examples/two_person_walk.manic +296 -0
- package/examples/two_pointer.manic +32 -0
- package/examples/type-to-sdf.manic +139 -0
- package/examples/typewriter.manic +28 -0
- package/examples/vector_field.manic +32 -0
- package/examples/vertical-spring.manic +10 -0
- package/examples/volume3.manic +21 -0
- package/examples/volumes-solid-of-revolution.manic +111 -0
- package/examples/walk.manic +154 -0
- package/examples/wheel-duo.manic +91 -0
- package/examples/wheel-radial.manic +78 -0
- package/examples/wheel-square.manic +83 -0
- package/examples/wireframe-spheres.manic +37 -0
- package/examples/zeroth-law-thermodynamics.manic +269 -0
- package/package.json +59 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// quiz-geometry.manic — a QUIZ SHORT, hand-authored (creator-template proto)
|
|
3
|
+
// ----------------------------------------------------------------------------
|
|
4
|
+
// The first proof of the "quiz Short" format the `creator` kit will later
|
|
5
|
+
// automate (see CAPABILITIES → Creator format templates). Built ENTIRELY from
|
|
6
|
+
// shipped primitives on a 9:16 canvas: a typewriter question, an ANIMATED
|
|
7
|
+
// geometry figure (the geo kit constructs the Euler line — which IS the answer),
|
|
8
|
+
// four option cards, a countdown, a time-out reveal, and a socials footer.
|
|
9
|
+
// When the `quiz`/`countdown`/`socials` builtins land, this whole file collapses
|
|
10
|
+
// to a few lines — but the beat/layout are proven here first.
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
title("Quiz — the Euler Line");
|
|
14
|
+
canvas("9:16"); // portrait 1080×1920 · cx=540 cy=960
|
|
15
|
+
template("paper");
|
|
16
|
+
|
|
17
|
+
// ---- the question (two typewriter lines, top / title-safe) ----
|
|
18
|
+
text(q1, (cx, 210), "3 triangle centres are always"); color(q1, fg); size(q1, 44); bold(q1); untraced(q1);
|
|
19
|
+
text(q2, (cx, 285), "collinear — on WHICH line?"); color(q2, cyan); size(q2, 44); bold(q2); untraced(q2);
|
|
20
|
+
|
|
21
|
+
// ---- the animated geometry figure (geo kit) : the Euler line construction ----
|
|
22
|
+
// (colours are palette-semantic — fg/cyan/magenta/lime/dim — so they REMAP with
|
|
23
|
+
// the template; gold/red/etc. are fixed and would lose contrast on `paper`)
|
|
24
|
+
point(A, (335, 760), "A"); point(B, (745, 745), "B"); point(C, (540, 470), "C");
|
|
25
|
+
hidden(A); hidden(B); hidden(C);
|
|
26
|
+
segment(ab, A, B); segment(bc, B, C); segment(ca, C, A); untraced(ab); untraced(bc); untraced(ca);
|
|
27
|
+
circumcircle(cc, A, B, C); color(cc, dim); untraced(cc);
|
|
28
|
+
circumcenter(O, A, B, C); color(O, magenta); label(O, "O", (20, -12)); hidden(O);
|
|
29
|
+
centroid(G, A, B, C); color(G, lime); label(G, "G", (20, -12)); hidden(G);
|
|
30
|
+
orthocenter(H, A, B, C); color(H, cyan); label(H, "H", (-34, -12)); hidden(H);
|
|
31
|
+
segment(euler, O, H); color(euler, fg); stroke(euler, 7); glow(euler, 1.5); untraced(euler);
|
|
32
|
+
|
|
33
|
+
// ---- four option cards, laid out 2×2 (compact — clears the figure) ----
|
|
34
|
+
rect(c1, (305, 1010), 428, 120); color(c1, panel); filled(c1); hidden(c1);
|
|
35
|
+
rect(c2, (775, 1010), 428, 120); color(c2, panel); filled(c2); hidden(c2);
|
|
36
|
+
rect(c3, (305, 1150), 428, 120); color(c3, panel); filled(c3); hidden(c3);
|
|
37
|
+
rect(c4, (775, 1150), 428, 120); color(c4, panel); filled(c4); hidden(c4);
|
|
38
|
+
text(t1, (305, 1010), "A Euler line"); color(t1, fg); size(t1, 34); hidden(t1);
|
|
39
|
+
text(t2, (775, 1010), "B Perp. bisector"); color(t2, fg); size(t2, 34); hidden(t2);
|
|
40
|
+
text(t3, (305, 1150), "C Angle bisector"); color(t3, fg); size(t3, 34); hidden(t3);
|
|
41
|
+
text(t4, (775, 1150), "D Median"); color(t4, fg); size(t4, 34); hidden(t4);
|
|
42
|
+
|
|
43
|
+
// ---- countdown ring + digit (palette-semantic → template-safe) ----
|
|
44
|
+
circle(ring, (cx, 1400), 62); color(ring, cyan); stroke(ring, 6); outlined(ring); hidden(ring);
|
|
45
|
+
text(timer, (cx, 1400), "5"); color(timer, fg); size(timer, 62); bold(timer); hidden(timer);
|
|
46
|
+
|
|
47
|
+
// ---- socials footer : icons DRAWN from primitives (manic has no raster images),
|
|
48
|
+
// so they render on any template; grouped as `foot` to show together ----
|
|
49
|
+
line(rule, (150, 1740), (930, 1740)); color(rule, dim); stroke(rule, 2);
|
|
50
|
+
// ▶ YouTube chip
|
|
51
|
+
rect(yt, (312, 1815), 58, 40); color(yt, magenta); filled(yt);
|
|
52
|
+
polygon(ytp, (300, 1802), (300, 1828), (326, 1815), bg);
|
|
53
|
+
// ✕ X chip
|
|
54
|
+
rect(xb, (404, 1815), 46, 46); color(xb, fg); outlined(xb);
|
|
55
|
+
line(x1, (392, 1803), (416, 1827)); color(x1, fg); stroke(x1, 4);
|
|
56
|
+
line(x2, (416, 1803), (392, 1827)); color(x2, fg); stroke(x2, 4);
|
|
57
|
+
// ◎ Instagram chip
|
|
58
|
+
rect(ig, (496, 1815), 46, 46); color(ig, fg); outlined(ig);
|
|
59
|
+
circle(igc, (496, 1815), 13); color(igc, fg); outlined(igc);
|
|
60
|
+
circle(igd, (509, 1802), 3); color(igd, fg); filled(igd);
|
|
61
|
+
// handle + link
|
|
62
|
+
text(foot, (740, 1815), "@manic · 8gwifi.org/manic"); color(foot, dim); size(foot, 28);
|
|
63
|
+
tag(rule, footer); tag(yt, footer); tag(ytp, footer); tag(xb, footer); tag(x1, footer);
|
|
64
|
+
tag(x2, footer); tag(ig, footer); tag(igc, footer); tag(igd, footer); tag(foot, footer);
|
|
65
|
+
hidden(footer);
|
|
66
|
+
|
|
67
|
+
// ================= THE BEAT =================
|
|
68
|
+
// 1) ask — typewriter
|
|
69
|
+
type(q1, 1.1);
|
|
70
|
+
type(q2, 1.0);
|
|
71
|
+
wait(0.2);
|
|
72
|
+
|
|
73
|
+
// 2) the figure constructs itself (animated geometry — the geo kit)
|
|
74
|
+
par { show(A, 0.25); show(B, 0.25); show(C, 0.25); }
|
|
75
|
+
par { draw(ab, 0.5); draw(bc, 0.5); draw(ca, 0.5); }
|
|
76
|
+
draw(cc, 0.6);
|
|
77
|
+
par { show(O); show(G); show(H); }
|
|
78
|
+
draw(euler, 0.9); pulse(euler); // the three centres line up → the Euler line
|
|
79
|
+
wait(0.3);
|
|
80
|
+
|
|
81
|
+
// 3) options fly in, staggered
|
|
82
|
+
seq {
|
|
83
|
+
par { show(c1, 0.2); show(t1, 0.2); }
|
|
84
|
+
par { show(c2, 0.2); show(t2, 0.2); }
|
|
85
|
+
par { show(c3, 0.2); show(t3, 0.2); }
|
|
86
|
+
par { show(c4, 0.2); show(t4, 0.2); }
|
|
87
|
+
}
|
|
88
|
+
show(footer, 0.3);
|
|
89
|
+
|
|
90
|
+
// 4) countdown 5 → 1
|
|
91
|
+
par { show(ring, 0.2); show(timer, 0.2); }
|
|
92
|
+
wait(0.8); say(timer, "4", 0.15);
|
|
93
|
+
wait(0.8); say(timer, "3", 0.15);
|
|
94
|
+
wait(0.8); say(timer, "2", 0.15);
|
|
95
|
+
wait(0.8); say(timer, "1", 0.15);
|
|
96
|
+
wait(0.8);
|
|
97
|
+
|
|
98
|
+
// 5) TIME OUT → reveal: card A (the Euler line) glows, the rest dim
|
|
99
|
+
say(timer, "0", 0.15); flash(ring, gold);
|
|
100
|
+
par {
|
|
101
|
+
recolor(c1, lime); flash(c1, gold); pulse(c1);
|
|
102
|
+
recolor(t1, void);
|
|
103
|
+
fade(c2, 0.5); fade(t2, 0.5);
|
|
104
|
+
fade(c3, 0.5); fade(t3, 0.5);
|
|
105
|
+
fade(c4, 0.5); fade(t4, 0.5);
|
|
106
|
+
flash(euler, gold);
|
|
107
|
+
}
|
|
108
|
+
wait(1.6);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// A creator quiz Short (9:16). Try the four card SKINS by changing the style
|
|
2
|
+
// string on `quiz(...)`: "badge" (default) · "minimal" · "glass" · "plain".
|
|
3
|
+
// You can also add a question REVEAL in the same string, order-free, e.g.
|
|
4
|
+
// quiz(q, "...", "glass fade") // glass cards + fade-in question
|
|
5
|
+
canvas("9:16");
|
|
6
|
+
template("shorts");
|
|
7
|
+
|
|
8
|
+
// a reusable creator profile (set once, drawn by `socials`)
|
|
9
|
+
creator(me, "@anish2good yt=zarigatongy x=@anish2good web=8gwifi.org/manic accent=magenta");
|
|
10
|
+
|
|
11
|
+
// the quiz: a question + four answers, one marked `correct`
|
|
12
|
+
quiz(q, "What is 7 x 8?", "badge");
|
|
13
|
+
option(q, "54");
|
|
14
|
+
option(q, "56", correct);
|
|
15
|
+
option(q, "48");
|
|
16
|
+
option(q, "63");
|
|
17
|
+
|
|
18
|
+
// play the whole ask -> countdown -> reveal beat over 8 seconds
|
|
19
|
+
run(q, 8);
|
|
20
|
+
|
|
21
|
+
// the footer with the creator's socials
|
|
22
|
+
socials(me);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// raft-cm.manic — centre of mass, on the physics baseline (Layer 1)
|
|
3
|
+
// ----------------------------------------------------------------------------
|
|
4
|
+
// `raft(id, [center], [personmass], [raftmass], [unit])` — a person walking on
|
|
5
|
+
// a floating raft. With no external horizontal force, momentum is conserved and
|
|
6
|
+
// the centre of mass stays FIXED: the raft slides the opposite way by
|
|
7
|
+
// −m_person/(m_person+m_raft) of each step. PRE-SIMULATED; `run(id,[dur])`
|
|
8
|
+
// replays it. The dashed line marks the (unmoving) centre of mass.
|
|
9
|
+
//
|
|
10
|
+
// TO ADAPT: make the raft much lighter (raftmass) — it slides much further.
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
title("Raft — walk one way, the raft slides the other");
|
|
14
|
+
canvas("16:9");
|
|
15
|
+
|
|
16
|
+
text(hdr, (cx, 46), "Momentum stays zero, so the centre of mass never moves");
|
|
17
|
+
size(hdr, 23); color(hdr, cyan); bold(hdr); display(hdr);
|
|
18
|
+
|
|
19
|
+
raft(rf, (cx, 380), 70, 200);
|
|
20
|
+
|
|
21
|
+
text(cap, (cx, h - 32), "the person walks; the raft glides back — the dashed centre-of-mass line stays put");
|
|
22
|
+
size(cap, 16); color(cap, dim); display(cap);
|
|
23
|
+
|
|
24
|
+
run(rf, 9);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// ramp.manic — friction on an incline, on the physics baseline (Layer 1)
|
|
3
|
+
// ----------------------------------------------------------------------------
|
|
4
|
+
// `ramp(id, [center], [angle], [mass], [applied], [unit])` — a block sliding
|
|
5
|
+
// down an inclined plane. Full force model: gravity along the slope, the normal
|
|
6
|
+
// force, and a static→kinetic friction switch. Friction turns mechanical energy
|
|
7
|
+
// into heat, so `energygraph`'s total DECAYS as the block slides. PRE-SIMULATED
|
|
8
|
+
// with RK4; `run(id,[dur])` replays it.
|
|
9
|
+
//
|
|
10
|
+
// TO ADAPT: lower the angle below the friction angle and the block won't budge.
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
title("Inclined plane — friction dissipates energy");
|
|
14
|
+
canvas("16:9");
|
|
15
|
+
|
|
16
|
+
text(hdr, (cx, 44), "Block on a ramp — μ friction bleeds the energy away");
|
|
17
|
+
size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr);
|
|
18
|
+
|
|
19
|
+
ramp(rp, (300, 470), 30);
|
|
20
|
+
energygraph(rp, (960, 320), 120);
|
|
21
|
+
|
|
22
|
+
text(cap, (cx, h - 32), "as the block slides down, the gold total energy line falls — friction converts it to heat");
|
|
23
|
+
size(cap, 16); color(cap, dim); display(cap);
|
|
24
|
+
|
|
25
|
+
run(rp, 6);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// ray-fan.manic — the signature of an aberration (real optics analysis)
|
|
3
|
+
// ----------------------------------------------------------------------------
|
|
4
|
+
// A ray-fan plot: for each ray, how far off focus does it land (y) against
|
|
5
|
+
// where it entered the lens (x, edge → edge)? `rayfan` traces the real
|
|
6
|
+
// spherical surfaces. A perfect lens is a flat line at zero; the singlet's
|
|
7
|
+
// cubic S-CURVE is textbook spherical aberration — the outer rays bend too
|
|
8
|
+
// much. (The doublet/triplet flatten it, drawn to the same scale.)
|
|
9
|
+
// ============================================================================
|
|
10
|
+
|
|
11
|
+
title("Ray-Fan — Reading an Aberration");
|
|
12
|
+
canvas("16:9");
|
|
13
|
+
|
|
14
|
+
rayfan(rf, (640, 340), "singlet");
|
|
15
|
+
|
|
16
|
+
text(cap, (cx, h - 46), ""); color(cap, fg); size(cap, 24); bold(cap); display(cap); sticky(cap);
|
|
17
|
+
|
|
18
|
+
// ================= THE SCENE =================
|
|
19
|
+
say(cap, "each ray: how far off focus (y) vs where it entered (x)…", 0.5);
|
|
20
|
+
draw(rf.curve, 2.2);
|
|
21
|
+
wait(0.5);
|
|
22
|
+
|
|
23
|
+
say(cap, "a flat line would be a perfect lens — this ISN'T flat", 0.3);
|
|
24
|
+
wait(2.0);
|
|
25
|
+
|
|
26
|
+
say(cap, "that S-curve is spherical aberration: the edges bend too much", 0.3);
|
|
27
|
+
wait(1.4);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// raymarch-alpha — Shader backbone step 7: OUTPUT ALPHA. A raymarched object with
|
|
2
|
+
// `let alpha` renders on a TRANSPARENT background, so it composites over the rest of
|
|
3
|
+
// the scene instead of drawing an opaque backdrop. Here a coloured metaball floats
|
|
4
|
+
// over a full-canvas 2-D `shader` gradient — you can see the gradient THROUGH the
|
|
5
|
+
// object's missed rays (and faintly through the object itself at alpha 0.9). Alpha
|
|
6
|
+
// is faithful on both backends: GLSL writes `vec4(rgb, alpha)` and blends; the CPU
|
|
7
|
+
// field stores per-texel alpha and composites the same way.
|
|
8
|
+
//
|
|
9
|
+
// manic examples/raymarch-alpha.manic
|
|
10
|
+
title("Raymarch with alpha — compositing over the scene");
|
|
11
|
+
canvas("16:9");
|
|
12
|
+
template("black");
|
|
13
|
+
|
|
14
|
+
// a colourful 2-D shader gradient BEHIND the object (fills the canvas, opaque)
|
|
15
|
+
shader(back) {
|
|
16
|
+
let hue = mod(u * 160.0 + v * 90.0 + 20.0, 360.0);
|
|
17
|
+
let sat = 0.7;
|
|
18
|
+
let val = 0.42 + 0.12 * sin(u * 6.28);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
camera3((2.6, -3.2, 2.0), (0, 0, 0), 40, perspective);
|
|
22
|
+
|
|
23
|
+
raymarch(blob) {
|
|
24
|
+
// two spheres smooth-unioned into a metaball
|
|
25
|
+
let a = sdsphere(x - 0.55 * sin(t), y, z + 0.4 * cos(t), 0.52);
|
|
26
|
+
let b = sdsphere(x + 0.55 * cos(t * 0.8), y - 0.25, z, 0.44);
|
|
27
|
+
let d = smin(a, b, 0.4);
|
|
28
|
+
// iridescent hit colour
|
|
29
|
+
let hue = mod(205.0 + nx * 85.0 + t * 34.0, 360.0);
|
|
30
|
+
let sat = 0.82;
|
|
31
|
+
let val = 0.55 + 0.3 * nz;
|
|
32
|
+
// OUTPUT ALPHA: hit ⇒ 0.9 (slightly translucent), miss ⇒ transparent (composites)
|
|
33
|
+
let alpha = 0.9;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
caption(head, "raymarch ← alpha (composited)", (640, 66), 32);
|
|
37
|
+
hidden(head);
|
|
38
|
+
show(head);
|
|
39
|
+
orbit3(60, 0, 5.0, 18, smooth);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// raymarch-boxgrid — Shader V2.3, the finale: the raymarched Shadertoy that
|
|
2
|
+
// started this whole thread (tssSDN — a grid of boxes rippling around a bouncing
|
|
3
|
+
// sphere), rebuilt as a TRUE ray-march this time (V2 tier), not the cloud3
|
|
4
|
+
// reimagining (examples/cloud3-ripple.manic). One signed-distance field does it:
|
|
5
|
+
// `rep(x,r)` tiles a box into an infinite grid (`sdbox3`), each cell's HEIGHT a
|
|
6
|
+
// wave of its `rand2` hash + a falloff from the moving sphere's position; `smin`
|
|
7
|
+
// unions in the sphere. Per-pixel loop in the ENGINE, no vec types — just a
|
|
8
|
+
// scalar distance formula. Coloured red→gold by height, orbited by `camera3`.
|
|
9
|
+
//
|
|
10
|
+
// manic examples/raymarch-boxgrid.manic
|
|
11
|
+
title("A ray-marched box grid — the Shadertoy, rebuilt");
|
|
12
|
+
canvas("16:9");
|
|
13
|
+
template("black");
|
|
14
|
+
|
|
15
|
+
camera3((2.6, -3.2, 2.2), (0, 0, 0.25), 40, perspective);
|
|
16
|
+
|
|
17
|
+
raymarch(grid) {
|
|
18
|
+
let rp = 0.42; // cell size
|
|
19
|
+
let idx = floor(x / rp); // which cell (x)
|
|
20
|
+
let idy = floor(y / rp); // which cell (y)
|
|
21
|
+
let lx = rep(x, rp); // local coord inside the cell
|
|
22
|
+
let ly = rep(y, rp);
|
|
23
|
+
let sx = sin(t * 1.8) * 1.3; // the bouncing sphere (inlined)
|
|
24
|
+
let sy = cos(t * 2.2) * 1.3;
|
|
25
|
+
let cxx = idx * rp + rp * 0.5; // this cell's centre
|
|
26
|
+
let cyy = idy * rp + rp * 0.5;
|
|
27
|
+
let bs = hypot(cxx - sx, cyy - sy); // cell → sphere distance
|
|
28
|
+
let fall = 1 - smoothstep(0.0, 2.2, bs); // near the sphere ⇒ taller
|
|
29
|
+
let hsh = rand2(idx, idy); // per-cell phase
|
|
30
|
+
let bh = 0.34 + 0.30 * sin(hsh * 6.283 + t * 2.6 + bs * 1.7) * fall; // box height (>0)
|
|
31
|
+
let box = sdbox3(lx, ly, z - bh * 0.5, rp * 0.4, rp * 0.4, bh * 0.5);
|
|
32
|
+
let ball = sdsphere(x - sx, y - sy, z - 0.6, 0.18);
|
|
33
|
+
let d = smin(box, ball, 0.04); // grid ∪ sphere
|
|
34
|
+
// colour: red troughs → gold crests, top faces brighter
|
|
35
|
+
let hue = mod(6.0 + bh * 42.0, 360.0);
|
|
36
|
+
let sat = 0.85;
|
|
37
|
+
let val = 0.28 + 0.55 * nz;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
caption(head, "A ray-marched box grid", (640, 66), 34);
|
|
41
|
+
caption(sub, "sdbox3 + rep() tiling + smin — the Shadertoy, in manic", (640, 122), 22);
|
|
42
|
+
hidden(head);
|
|
43
|
+
hidden(sub);
|
|
44
|
+
show(head);
|
|
45
|
+
wait(1.5);
|
|
46
|
+
show(sub);
|
|
47
|
+
orbit3(50, 0, 4.6, 22, smooth);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// raymarch-docker-latency — "Visualizing Docker daemon socket latency as a raymarched
|
|
2
|
+
// fluid surface." A per-pixel ray-marched LIQUID MESH: a grid of columns whose heights
|
|
3
|
+
// ARE a latency trace. The daemon socket sits at the origin and emits high-frequency
|
|
4
|
+
// concentric pings (amplitude modulated by a jittery round-trip-time signal); three
|
|
5
|
+
// containers fire expanding ring events at baked timestamps, each ring's reach ∝ its
|
|
6
|
+
// measured RTT. Every cell samples that field at its centre → the mesh shimmers with
|
|
7
|
+
// socket traffic. One scalar SDF (`sdbox3` + `rep()` tiling), marched by the engine.
|
|
8
|
+
//
|
|
9
|
+
// Honest note: manic is PURE IN t (that's what lets it scrub + record), so it does NOT
|
|
10
|
+
// tail a live /var/run/docker.sock in real time. The trace is BAKED IN — timestamps and
|
|
11
|
+
// RTTs as constants — so the same second always renders the same wavefront. Swap the
|
|
12
|
+
// constants for a captured `docker events` / socket-latency log and the mesh replays it
|
|
13
|
+
// deterministically: data → SDF displacement → raymarch, exactly as described. The data
|
|
14
|
+
// source is a recording, not a socket; the mechanism is real.
|
|
15
|
+
//
|
|
16
|
+
// manic examples/raymarch-docker-latency.manic
|
|
17
|
+
title("Docker daemon socket latency — a raymarched liquid mesh");
|
|
18
|
+
canvas("16:9");
|
|
19
|
+
template("black");
|
|
20
|
+
|
|
21
|
+
camera3((2.4, -3.3, 2.0), (0, 0, 0.2), 40, perspective);
|
|
22
|
+
|
|
23
|
+
raymarch(fluid) {
|
|
24
|
+
let rp = 0.34; // mesh cell size
|
|
25
|
+
let idx = floor(x / rp); let idy = floor(y / rp);
|
|
26
|
+
let lx = rep(x, rp); let ly = rep(y, rp);
|
|
27
|
+
let cx = idx*rp + rp*0.5; let cy = idy*rp + rp*0.5; // this cell's centre
|
|
28
|
+
let r0 = hypot(cx, cy); // distance from the daemon socket (origin)
|
|
29
|
+
|
|
30
|
+
// baked latency signal: socket round-trip time, jittery + bursty
|
|
31
|
+
let lat = 0.5 + 0.28*sin(t*5.3) + 0.16*sin(t*11.7 + 1.3) + 0.10*sin(t*23.1 + 0.7);
|
|
32
|
+
|
|
33
|
+
// the daemon socket: high-frequency concentric pings, amplitude ∝ latency
|
|
34
|
+
let pings = lat * sin(6.0*r0 - t*7.0) / (1.0 + 1.3*r0);
|
|
35
|
+
|
|
36
|
+
// three containers talking to the daemon: baked (epicenter, fire time, RTT) rings
|
|
37
|
+
let d1 = hypot(cx + 1.3, cy - 0.8); let a1 = t - 1.4; let f1 = a1*1.9;
|
|
38
|
+
let e1 = step(0.0, a1) * exp(-0.7*a1) * sin(7.0*(d1 - f1)) * exp(-3.0*(d1-f1)*(d1-f1));
|
|
39
|
+
let d2 = hypot(cx - 1.6, cy - 1.1); let a2 = t - 3.2; let f2 = a2*2.1;
|
|
40
|
+
let e2 = step(0.0, a2) * exp(-0.6*a2) * sin(7.0*(d2 - f2)) * exp(-3.0*(d2-f2)*(d2-f2));
|
|
41
|
+
let d3 = hypot(cx + 0.4, cy + 1.7); let a3 = t - 5.0; let f3 = a3*2.0;
|
|
42
|
+
let e3 = step(0.0, a3) * exp(-0.55*a3) * sin(7.0*(d3 - f3)) * exp(-3.0*(d3-f3)*(d3-f3));
|
|
43
|
+
|
|
44
|
+
// column height = calm water level + the summed latency displacement (always > 0)
|
|
45
|
+
let bh = clamp(0.22 + 0.13*pings + 0.17*(e1 + e2 + e3), 0.03, 0.78);
|
|
46
|
+
let box = sdbox3(lx, ly, z - bh*0.5, rp*0.42, rp*0.42, bh*0.5);
|
|
47
|
+
let d = box;
|
|
48
|
+
|
|
49
|
+
// hit colour: deep-blue troughs → bright cyan crests (from the actual hit height),
|
|
50
|
+
// top faces brightest — no cross-stage lets, so the field colours cleanly
|
|
51
|
+
let crest = clamp(hz * 1.7, 0.0, 1.0);
|
|
52
|
+
let hue = mod(210.0 - crest*56.0, 360.0);
|
|
53
|
+
let sat = 0.82;
|
|
54
|
+
let val = 0.16 + 0.55*crest + 0.30*nz;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ---- annotations ----
|
|
58
|
+
caption(head, "Docker daemon socket latency", (640, 60), 33);
|
|
59
|
+
caption(sub, "each socket ping ripples a raymarched liquid mesh", (640, 112), 21);
|
|
60
|
+
hidden(head);
|
|
61
|
+
hidden(sub);
|
|
62
|
+
equation(eq, (640, 636), `z_{\text{cell}} = \mathrm{water} + \sum_i \mathrm{RTT}_i\,\mathrm{ring}(r_i - c\,\Delta t_i)`, 26);
|
|
63
|
+
caption(note, "baked latency trace → SDF displacement → raymarch · pure in t, so it scrubs", (640, 690), 18);
|
|
64
|
+
hidden(eq);
|
|
65
|
+
hidden(note);
|
|
66
|
+
|
|
67
|
+
show(head);
|
|
68
|
+
wait(1.6);
|
|
69
|
+
show(sub);
|
|
70
|
+
wait(2.2);
|
|
71
|
+
show(eq);
|
|
72
|
+
show(note);
|
|
73
|
+
// slow orbit so the mesh reads as genuine 3-D geometry
|
|
74
|
+
orbit3(52, 8, 4.8, 22, smooth);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// raymarch-metaballs — Shader V2: a 3-D scene RAY-MARCHED per pixel. You write
|
|
2
|
+
// only the signed-distance field `let d` (the distance from any point x,y,z to
|
|
3
|
+
// the scene); the engine marches a ray per pixel until it hits the surface,
|
|
4
|
+
// takes the normal by finite differences, and shades it. No per-pixel loop in
|
|
5
|
+
// the DSL (it runs in the engine, like `voronoi`/`mandelbrot`) and NO vec/mat
|
|
6
|
+
// types — the SDF is a scalar formula, component math the manic way. Here three
|
|
7
|
+
// spheres orbit and MERGE through `smin` (smooth union) into living metaballs.
|
|
8
|
+
//
|
|
9
|
+
// manic examples/raymarch-metaballs.manic
|
|
10
|
+
title("Metaballs — a ray-marched 3D field");
|
|
11
|
+
canvas("16:9");
|
|
12
|
+
template("black");
|
|
13
|
+
|
|
14
|
+
raymarch(blobs) {
|
|
15
|
+
// three moving spheres (signed distance = distance to centre − radius)
|
|
16
|
+
let a = sdsphere(x - 0.75*sin(t), y - 0.5*cos(t*1.3), z + 0.3*sin(t*0.7), 0.52);
|
|
17
|
+
let b = sdsphere(x + 0.6*cos(t*0.9), y + 0.45*sin(t*1.1), z - 0.35*cos(t), 0.46);
|
|
18
|
+
let c = sdsphere(x + 0.2*sin(t*1.7), y + 0.6*sin(t*0.7), z + 0.25*sin(t*1.4), 0.4);
|
|
19
|
+
// smooth-union them (smin) so they gloop together instead of just overlapping
|
|
20
|
+
let ab = smin(a, b, 0.55);
|
|
21
|
+
let d = smin(ab, c, 0.55);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ---- textbook annotations ----
|
|
25
|
+
caption(head, "Metaballs — one distance field", (640, 66), 34);
|
|
26
|
+
caption(sub, "raymarch: you write the SDF, the engine marches it", (640, 122), 22);
|
|
27
|
+
hidden(head);
|
|
28
|
+
hidden(sub);
|
|
29
|
+
equation(eq, (640, 648), `d = \operatorname{smin}(d_1, d_2, k)`, 34);
|
|
30
|
+
hidden(eq);
|
|
31
|
+
|
|
32
|
+
show(head);
|
|
33
|
+
wait(1.6);
|
|
34
|
+
show(sub);
|
|
35
|
+
wait(2.6);
|
|
36
|
+
show(eq);
|
|
37
|
+
wait(22);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// raymarch-sculpture — Shader V2.2: a coloured, carved SDF sculpture that a real
|
|
2
|
+
// `camera3` orbits. New since V2.1: (1) your own HIT colour — `let hue`/`sat`/`val`
|
|
3
|
+
// (or r/g/b) as a formula of the surface normal `nx`/`ny`/`nz`, hit height `hz`
|
|
4
|
+
// and time `t`; (2) `camera3` reuse — the marcher builds its rays from the scene
|
|
5
|
+
// camera, so `orbit3` sweeps around the scene; (3) SDF booleans `smin` (smooth
|
|
6
|
+
// union), `sdsub` (carve), `sdint` (intersect). Still just a scalar distance
|
|
7
|
+
// field — no per-pixel loop in the DSL, no vec types.
|
|
8
|
+
//
|
|
9
|
+
// manic examples/raymarch-sculpture.manic
|
|
10
|
+
title("A carved, coloured SDF — orbited by camera3");
|
|
11
|
+
canvas("16:9");
|
|
12
|
+
template("black");
|
|
13
|
+
|
|
14
|
+
camera3((3.4, -3.8, 2.2), (0, 0, 0.15), 38, perspective);
|
|
15
|
+
|
|
16
|
+
raymarch(gem) {
|
|
17
|
+
// a core sphere with two bumps smoothly fused on (metaball style)
|
|
18
|
+
let core = sdsphere(x, y, z, 1.0);
|
|
19
|
+
let b1 = sdsphere(x - 0.9*sin(t*0.8), y, z + 0.9*cos(t*0.8), 0.44);
|
|
20
|
+
let b2 = sdsphere(x + 0.5*cos(t), y - 0.85*sin(t*1.1), z, 0.4);
|
|
21
|
+
let blob = smin(smin(core, b1, 0.45), b2, 0.45);
|
|
22
|
+
// carve a spherical bite out of it
|
|
23
|
+
let bite = sdsphere(x - 0.55, y - 0.9, z + 0.55, 0.62);
|
|
24
|
+
let d = sdsub(bite, blob);
|
|
25
|
+
// iridescent colour: hue from the facing direction + a slow time sweep
|
|
26
|
+
let hue = mod(205.0 + nx*95.0 + ny*55.0 + t*40.0, 360.0);
|
|
27
|
+
let sat = 0.82;
|
|
28
|
+
let val = 0.52 + 0.28*nz;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
caption(head, "A carved, coloured SDF", (640, 66), 34);
|
|
32
|
+
caption(sub, "hit colour from the normal + camera3 orbit", (640, 122), 22);
|
|
33
|
+
hidden(head);
|
|
34
|
+
hidden(sub);
|
|
35
|
+
show(head);
|
|
36
|
+
wait(1.4);
|
|
37
|
+
show(sub);
|
|
38
|
+
// slow camera orbit — the marcher re-reads camera3 every frame (captions stay up)
|
|
39
|
+
orbit3(70, 0, 5.4, 24, smooth);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// raymarch-shapes3 — the 3-D shape/SDF builtins (Layer 1, batch 2) in a real
|
|
2
|
+
// ray-march: a torus, an octahedron, and a capsule spindle, smooth-unioned and
|
|
3
|
+
// orbited by camera3. Each is ONE scalar builtin — no vec math, no hand-written
|
|
4
|
+
// distance functions. Full-res GLSL with the CPU marcher as the exact fallback.
|
|
5
|
+
//
|
|
6
|
+
// manic examples/raymarch-shapes3.manic
|
|
7
|
+
title("Ray-marched SDF primitives — torus · octahedron · capsule");
|
|
8
|
+
canvas("16:9");
|
|
9
|
+
template("black");
|
|
10
|
+
|
|
11
|
+
camera3((3.2, -3.6, 2.4), (0, 0, 0), 40, perspective);
|
|
12
|
+
|
|
13
|
+
raymarch(scene) {
|
|
14
|
+
let tor = sdtorus(x, y, z, 0.95, 0.26); // ring in the XY plane
|
|
15
|
+
let oct = sdoctahedron(x, y, z - 1.05, 0.5); // floating above
|
|
16
|
+
let spn = sdcapsule(x, y, z, 1.5, 0.10); // vertical spindle through it
|
|
17
|
+
let d = smin(smin(tor, oct, 0.18), spn, 0.12);
|
|
18
|
+
// iridescent hit colour from the normal + a slow time sweep
|
|
19
|
+
let hue = mod(190.0 + nz * 70.0 + nx * 40.0 + t * 30.0, 360.0);
|
|
20
|
+
let sat = 0.82;
|
|
21
|
+
let val = 0.52 + 0.32 * nz;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
caption(head, "sdtorus · sdoctahedron · sdcapsule", (640, 66), 30);
|
|
25
|
+
caption(sub, "each shape one scalar builtin — no vec math", (640, 118), 20);
|
|
26
|
+
hidden(head);
|
|
27
|
+
hidden(sub);
|
|
28
|
+
show(head);
|
|
29
|
+
wait(1.4);
|
|
30
|
+
show(sub);
|
|
31
|
+
orbit3(70, 0, 5.4, 20, smooth);
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// reactive-integral.manic — one calculation, one continuous visual world
|
|
3
|
+
// ----------------------------------------------------------------------------
|
|
4
|
+
// Integration by parts uses one structured equation. `rewrite` keeps unchanged
|
|
5
|
+
// RaTeX parts alive while only the mathematical difference moves or enters.
|
|
6
|
+
// The graph then verifies the result: the slope of F is the height of f, and
|
|
7
|
+
// +C becomes a visible family of vertical translations.
|
|
8
|
+
// ============================================================================
|
|
9
|
+
|
|
10
|
+
title("A Reactive Integral");
|
|
11
|
+
canvas("16:9");
|
|
12
|
+
template("plain");
|
|
13
|
+
watermark(manicMark, (1135, 30), "Made With Manic");
|
|
14
|
+
|
|
15
|
+
// Shared colour roles follow the same mathematical objects through every act.
|
|
16
|
+
// x / u is magenta; cos, sin and their antiderivative relation are cyan.
|
|
17
|
+
text(kicker, (285, 38), "ONE INTEGRAL · ONE CONTINUOUS STORY");
|
|
18
|
+
size(kicker, 18); color(kicker, dim); bold(kicker); hidden(kicker);
|
|
19
|
+
|
|
20
|
+
text(headline, (430, 72), "Watch only the mathematics that changes");
|
|
21
|
+
size(headline, 28); color(headline, fg); bold(headline); hidden(headline);
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// ONE PERSISTENT EQUATION
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
equation(
|
|
28
|
+
work,
|
|
29
|
+
(cx, 145),
|
|
30
|
+
`\int \textcolor{magenta}{x}\,\textcolor{cyan}{\cos(x)}\,dx`,
|
|
31
|
+
46
|
|
32
|
+
);
|
|
33
|
+
hidden(work);
|
|
34
|
+
|
|
35
|
+
// The by-parts roles remain visible while the expression changes above them.
|
|
36
|
+
equation(uChoice, (330, 225), `u=x`, 28); color(uChoice, magenta); hidden(uChoice);
|
|
37
|
+
equation(dvChoice, (525, 225), `dv=\cos(x)\,dx`, 28); color(dvChoice, cyan); hidden(dvChoice);
|
|
38
|
+
equation(duChoice, (760, 225), `du=dx`, 28); color(duChoice, magenta); hidden(duChoice);
|
|
39
|
+
equation(vChoice, (950, 225), `v=\sin(x)`, 28); color(vChoice, cyan); hidden(vChoice);
|
|
40
|
+
|
|
41
|
+
text(method, (cx, 278), "INTEGRATION BY PARTS");
|
|
42
|
+
size(method, 16); color(method, dim); bold(method); hidden(method);
|
|
43
|
+
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// ONE GRAPH, ASKED THREE CONNECTED QUESTIONS
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
let ox = cx;
|
|
49
|
+
let oy = 515;
|
|
50
|
+
let sx = 108;
|
|
51
|
+
let sy = 28;
|
|
52
|
+
|
|
53
|
+
axes(ax, (ox, oy), 550, 165, 1);
|
|
54
|
+
color(ax, dim); opacity(ax, 0.50); untraced(ax);
|
|
55
|
+
|
|
56
|
+
// Integrand and one representative antiderivative (C=0).
|
|
57
|
+
plot(f, (ox, oy), sx, sy, "x*cos(x)", (-5, 5));
|
|
58
|
+
color(f, cyan); stroke(f, 5); glow(f, 0.8); untraced(f);
|
|
59
|
+
|
|
60
|
+
plot(bigF, (ox, oy), sx, sy, "x*sin(x)+cos(x)", (-5, 5));
|
|
61
|
+
color(bigF, lime); stroke(bigF, 5); dashed(bigF, 18, 11);
|
|
62
|
+
glow(bigF, 0.8); untraced(bigF);
|
|
63
|
+
|
|
64
|
+
// Numerical derivative of F: drawing it lands directly on f.
|
|
65
|
+
deriv(dF, bigF);
|
|
66
|
+
color(dF, gold); stroke(dF, 3); glow(dF, 0.5); untraced(dF);
|
|
67
|
+
|
|
68
|
+
// A moving tangent makes “F' = f” a local statement at every x.
|
|
69
|
+
tangent(tan, bigF, -3.8, 180); color(tan, gold); hidden(tan);
|
|
70
|
+
slope(slopeValue, bigF, -3.8, (18, -24)); color(slopeValue, gold); hidden(slopeValue);
|
|
71
|
+
|
|
72
|
+
equation(fLabel, (250, 338), `f(x)=x\cos(x)`, 28); color(fLabel, cyan); hidden(fLabel);
|
|
73
|
+
equation(FLabel, (1010, 338), `F(x)=x\sin(x)+\cos(x)`, 28); color(FLabel, lime); hidden(FLabel);
|
|
74
|
+
equation(proofLabel, (cx, 280), `F'(x)=f(x)=x\cos(x)`, 34); color(proofLabel, gold); hidden(proofLabel);
|
|
75
|
+
|
|
76
|
+
// +C does not change the derivative: it translates the same curve vertically.
|
|
77
|
+
plot(Fup, (ox, oy), sx, sy, "x*sin(x)+cos(x)+1.5", (-5, 5));
|
|
78
|
+
plot(Fdown, (ox, oy), sx, sy, "x*sin(x)+cos(x)-1.5", (-5, 5));
|
|
79
|
+
color(Fup, magenta); color(Fdown, magenta);
|
|
80
|
+
stroke(Fup, 3); stroke(Fdown, 3); opacity(Fup, 0.55); opacity(Fdown, 0.55);
|
|
81
|
+
dashed(Fup, 14, 9); dashed(Fdown, 14, 9);
|
|
82
|
+
untraced(Fup); untraced(Fdown);
|
|
83
|
+
|
|
84
|
+
equation(familyLabel, (cx, 280), `F(x)+C\quad\text{changes height, not slope}`, 32);
|
|
85
|
+
color(familyLabel, magenta); hidden(familyLabel);
|
|
86
|
+
|
|
87
|
+
text(caption, (cx, 690), "");
|
|
88
|
+
size(caption, 19); color(caption, dim); bold(caption);
|
|
89
|
+
|
|
90
|
+
// Axes and curves are `untraced`, so their draw progress starts at zero without
|
|
91
|
+
// also zeroing opacity. That lets `draw(...)` reveal their geometry later.
|
|
92
|
+
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// TIMELINE
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
show(kicker, 0.45);
|
|
98
|
+
show(headline, 0.55);
|
|
99
|
+
say(caption, "Start with the question. Keep the stage — change only its state.");
|
|
100
|
+
show(work, 0.65);
|
|
101
|
+
wait(1.60);
|
|
102
|
+
|
|
103
|
+
// Choose u and dv by reusing the same semantic colours.
|
|
104
|
+
show(method, 0.35);
|
|
105
|
+
say(caption, "Choose the two roles. Colour preserves their identity.");
|
|
106
|
+
par { show(uChoice, 0.50); show(dvChoice, 0.65); }
|
|
107
|
+
wait(1.20);
|
|
108
|
+
par { show(duChoice, 0.50); show(vChoice, 0.50); }
|
|
109
|
+
wait(1.50);
|
|
110
|
+
|
|
111
|
+
// Build x sin(x) - integral sin(x) dx. Reusable glyphs travel to their new
|
|
112
|
+
// jobs while the obsolete cosine is the only original factor that leaves.
|
|
113
|
+
say(caption, "Apply integration by parts: persistent pieces move; new pieces arrive.");
|
|
114
|
+
rewrite(
|
|
115
|
+
work,
|
|
116
|
+
`\textcolor{magenta}{x}\textcolor{cyan}{\sin(x)}-\int\textcolor{cyan}{\sin(x)}\,dx`,
|
|
117
|
+
1.05,
|
|
118
|
+
smooth
|
|
119
|
+
);
|
|
120
|
+
wait(2.00);
|
|
121
|
+
|
|
122
|
+
// Only the remaining integral changes. x sin(x) stays untouched.
|
|
123
|
+
say(caption, "Resolve the remaining integral. The stable product never blinks.");
|
|
124
|
+
rewrite(
|
|
125
|
+
work,
|
|
126
|
+
`\textcolor{magenta}{x}\textcolor{cyan}{\sin(x)}+\textcolor{cyan}{\cos(x)}+\textcolor{gold}{C}`,
|
|
127
|
+
1.00,
|
|
128
|
+
smooth
|
|
129
|
+
);
|
|
130
|
+
wait(2.00);
|
|
131
|
+
|
|
132
|
+
// Move attention from symbolic manipulation into the same idea as geometry.
|
|
133
|
+
say(caption, "Now verify the answer visually — without leaving the scene.");
|
|
134
|
+
par {
|
|
135
|
+
fade(method, 0.40);
|
|
136
|
+
fade(uChoice, 0.40); fade(dvChoice, 0.40);
|
|
137
|
+
fade(duChoice, 0.40); fade(vChoice, 0.40);
|
|
138
|
+
draw(ax, 0.85);
|
|
139
|
+
}
|
|
140
|
+
draw(f, 1.80);
|
|
141
|
+
show(fLabel, 0.45);
|
|
142
|
+
wait(1.00);
|
|
143
|
+
|
|
144
|
+
draw(bigF, 1.80);
|
|
145
|
+
show(FLabel, 0.45);
|
|
146
|
+
wait(1.00);
|
|
147
|
+
|
|
148
|
+
// The tangent and its numeric slope glide continuously across F.
|
|
149
|
+
say(caption, "At every x, the slope of the green curve equals the blue height.");
|
|
150
|
+
par { show(tan, 0.45); show(slopeValue, 0.45); }
|
|
151
|
+
par {
|
|
152
|
+
to(tan, x, 3.8, 4.80, smooth);
|
|
153
|
+
to(slopeValue, x, 3.8, 4.80, smooth);
|
|
154
|
+
}
|
|
155
|
+
wait(0.60);
|
|
156
|
+
|
|
157
|
+
// The derivative trace lands directly over the original integrand.
|
|
158
|
+
show(proofLabel, 0.50);
|
|
159
|
+
draw(dF, 2.20);
|
|
160
|
+
flash(f, cyan);
|
|
161
|
+
wait(1.40);
|
|
162
|
+
|
|
163
|
+
// Finish with the geometric meaning of the integration constant.
|
|
164
|
+
say(caption, "+C creates a family of answers — same shape, same slope.");
|
|
165
|
+
par {
|
|
166
|
+
fade(tan, 0.45); fade(slopeValue, 0.45); fade(dF, 0.45);
|
|
167
|
+
fade(proofLabel, 0.45); fade(fLabel, 0.45); fade(FLabel, 0.45);
|
|
168
|
+
show(familyLabel, 0.55);
|
|
169
|
+
pulse(work, 0.70);
|
|
170
|
+
}
|
|
171
|
+
par { draw(Fup, 1.50); draw(Fdown, 1.50); }
|
|
172
|
+
wait(2.80);
|