在 Lil 里画矢量字:点、笔画、路径与一套免循环的仿射变换
来源:beyondloom.com — 2026-10-20
📋 概述
Decker 生态里的 hershey 模块用 Hershey 1967 年的线段字库排版,而 Decker 的脚本语言 Lil 是 APL 风格。文章从点、笔画、路径三层嵌套列表讲起,说明为什么 canvas.line[] 要按整条折线设计而不是单段直线——否则每个调用点都得自己处理 N 个点对 N-1 条线的 off-by-one。再用 Lil 的自动贴合规则实现缩放、平移、错切与旋转:非均匀缩放要把比例包两层 list,错切要先用 last/first 的 @ 把 y 或 x 坐标剥出来。最后用 mag、heading、unit 在直角坐标与极坐标之间往返。
🔑 核心要点
- 三层结构:点是长度 2 的列表、笔画是点的列表、路径是笔画的列表,路径里各笔画的长度可以参差不齐
- 非均匀缩放的关键是把比例包两层:p * list list scalex,scaley,让贴合分别下推到笔画与点两级
- 错切用 last @ @ p 剥出所有 y 坐标,乘 (shearx,0) 加回路径,形成水平错切
- mag 与 heading 把路径分解成极坐标,unit 再还原成单位长度,于是绕原点旋转就是 (mag p)*unit angle+heading p
- 用 window 与随机游走 能做手绘抖动(line boil),叠几个正弦就能做出旗子飘动、水面波纹这类效果
💡 金句
Wherever possible, Decker’s scripting APIs are designed to work as collective operations, applying to a large data structure at once.
👍 0
👎 0
← 返回 Lobsters 首页