edulab · diff
git:20260830.ad65525 to git:20260925.32ce6c0
111 added, 24 removed. Audit A to A.
---
name: edulab
- description: 面向中高考数学的可视化解题工具:空间几何题生成可交互 3D 解题演示(建系向量法 + sympy 校验 + Three.js),函数表达式生成参数可控的 2D 图形(滑块实时联动)。触发词 /edulab。
+ description: "面向中高考数学的可视化解题工具:空间几何题生成可交互 3D 解题演示(建系向量法 + sympy 校验 + Three.js),函数表达式生成参数可控的 2D 图形(滑块实时联动)。产物为单文件自包含交互式 HTML。适用:用户给出立体几何题要 3D 演示解题步骤、要函数图像并能拖滑块看参数变化、要数学可视化教学素材。触发词:/edulab、立体几何、空间几何题、线面角、二面角、点到平面距离、异面直线距离、外接球、内切球、三视图、函数图像、函数可视化、二次函数、数学可视化。用法:/edulab <题目或函数>。"
---
# edulab
- 中高考数学可视化:空间几何 3D 解题演示 + 函数图形参数可控可视化。产物为单文件交互式 HTML。
+ ## Purpose
- ## 何时使用
+ 中高考数学可视化:把中文立体几何题或函数表达式,变成单文件、可离线打开、可交互的 HTML 演示。几何走"读题 -> spec JSON -> 建系向量法求解(sympy 校验)-> Three.js 场景";函数走"函数族 + 参数 -> Canvas2D 绘图 + 参数滑块实时联动"。
- - 用户给出立体几何题(中高考风格),需要 3D 演示解题过程
- - 用户想要函数图像且希望调参看变化(滑块联动)
- - `/edulab <题目或函数>`
+ ## When to Use
- ## 工作流
+ - 用户给出立体几何题(中高考风格),需要 3D 演示解题过程。
+ - 用户想要函数图像,并希望调参看变化(滑块联动)。
+ - 用户需要离线可开的数学可视化教学素材。
+ - 触发词:`/edulab <题目或函数>`、立体几何、空间几何题、线面角、二面角、外接球、内切球、三视图、函数图像、数学可视化。
- > **路径约定**:下文 `<skill>` 指本技能安装目录(如 `~/.claude/skills/edulab`)。运行脚本前请先 `cd` 到该目录,或将其替换为实际路径。Python 需已安装 sympy(建议:`python3 -m venv .venv && .venv/bin/pip install sympy`)。
+ ## When NOT to Use
+ - 用户要的是概念讲解而非数学演示 -> 交给 `teach-eli5`(可视化教学页)。
+ - 用户要设计课程或教案 -> 交给 `curriculum-design`。
+ - 用户要信息卡片、封面等设计产物 -> 交给 `infocard` / `mckinsey-cover`。
+ - 题目超出 13 种 query.type 覆盖范围 -> 先说明不支持,不要硬套近似题型交付。
+
+ ## Workflow
+
+ > **路径约定**:下文 `<skill>` 指本技能安装目录(如 `~/.claude/skills/edulab`)。运行脚本前先 `cd` 到该目录,或替换为实际路径。Python 需装 sympy(建议 `python3 -m venv .venv && .venv/bin/pip install sympy`)。
+
### 几何模块
- 1. 读题,确定立体类型与参数,写入 spec JSON(契约见 references/schema.md;题型清单见 references/taxonomy.md)。支持 query.type: line_plane_angle / line_line_angle / dihedral_angle / point_plane_distance / volume_tetra / parallel_perp / skew_distance / circumsphere / three_views / surface_shortest_path / insphere;solid: cube/cuboid/tetra/prism3/pyramid4/cylinder/cone/sphere。
- 2. 求解(需用已安装 sympy 的 Python 3):
+ 1. 读题,确定立体类型与参数,写入 spec JSON(契约见 `references/schema.md`;题型清单见 `references/taxonomy.md`)。
+ 2. 求解:
```
cd <skill>/scripts/geometry
python3 geometry_solver.py <spec.json> <scene.json>
```
- solver 内含 sympy 计算,输出精确值 + 数值。检查 steps 与 result 是否与标准答案一致,不一致则修 spec 重跑,不得静默交付错误答案。
- 3. 生成 HTML(加 --offline 内联 Three.js,无网环境可打开):
+ 检查 steps 与 result 是否与标准答案一致;不一致则修 spec 重跑,不得静默交付错误答案。
+ 3. 生成 HTML(`--offline` 内联 Three.js,无网环境可打开):
```
python3 build_html.py <scene.json> <out.html> [--offline]
```
- 4. present_files 打开 out.html。
+ 4. 用 `present_files` 打开 out.html。
### 函数模块
- 1. 确定函数族(quadratic/linear/inverse/trig/exp/log/power 或 custom 自由表达式)。custom 时 params 传 {"expr": "sin(x)/x"},表达式经 safe_expr.py 安全解析(禁 eval),非法输入直接拒绝。
- 2. 生成 scene(参数写 JSON 文件传入):
+ 1. 确定函数族(quadratic / linear / inverse / trig / exp / log / power,或 custom 自由表达式、multi 多曲线对比)。
+ 2. 生成 scene:
```
cd <skill>/scripts/function
- python3 function_engine.py quadratic <params.json> <scene.json>
+ python3 function_engine.py <family> <params.json> <scene.json>
```
- 3. `python3 build_html.py <scene.json> <out.html>` 后 present_files。
+ 3. `python3 build_html.py <scene.json> <out.html>`,然后用 `present_files` 打开。
- ## 扩展约定
+ 完整命令配方见 `examples/quickstart.md`。
- - 新几何题型:geometry_solver.py 加 query type 分支 + taxonomy.md 更新状态。
- - 新函数族:function_families.py 加项 + template_2d.html 的 f()/computeProps() 加分支。
- - 新立体:solids.py 加 vertices/edges。
+ ## Decision Rules
+
+ - 输入是立体几何题 -> 几何模块;输入是函数/表达式/参数 -> 函数模块;两者混合 -> 拆成两个产物分别生成。
+ - `query.type` 支持 13 种:line_plane_angle / line_line_angle / dihedral_angle / point_plane_distance / volume_tetra / parallel_perp / skew_distance / circumsphere / insphere / three_views / surface_shortest_path / net / surface_volume。
+ - 立体支持 8 种:cube / cuboid / tetra / prism3 / pyramid4 / cylinder / cone / sphere。
+ - 自定义表达式(custom)-> params 传 `{"expr": "sin(x)/x"}`,只走 `safe_expr.py`,非法输入直接拒绝。
+ - 多曲线对比(multi)-> params 传 `{"items": [{"expr":..., "label":...}]}`。
+ - 需要 JSON 契约字段 -> 读 `references/schema.md`。
+ - 需要确认某题型/函数族/立体是否支持 -> 读 `references/taxonomy.md`。
+ - 需要架构决策、阶段规划或已知边界 -> 读 `references/design.md`。
+ - 无网环境 -> 必须加 `--offline`,否则 CDN 版打不开。
+
+ ## Constraints
+
+ - **几何答案必须经 sympy 计算并独立核验,不符不交付**;禁止用手算或近似值糊弄。
+ - **前端零求值**:自由表达式只允许走 `safe_expr.py`(禁 `eval`/`Function`)。
+ - **scene JSON 是唯一中间契约**:模板只消费 scene,不得在模板里写求解逻辑。
- 文件写入禁 Box Drawing 等 Unicode 装饰字符(防乱码);中文标签走 DOM/Canvas 文本。
- - 自由函数表达式若支持,禁 eval/Function,须安全 AST 解析。
+ - 离线打包依赖 `assets/vendor/three.min.js`、`assets/vendor/OrbitControls.js`、`assets/vendor/CSS2DRenderer.js`(`--offline` 时内联)。
+ - 产出 HTML 写到用户指定路径或工作目录,不要写回技能目录。
- ## 设计文档
+ ## Priority
- 完整架构、阶段规划、已验证结论见 references/design.md。
+ 1. 答案正确性 > 交付速度:sympy 校验不一致时先修 spec,绝不静默交付。
+ 2. 安全 > 便利:自由表达式只走 `safe_expr.py`,任何绕过解析器的写法都禁止。
+ 3. 离线可开 > 产物体积:无网环境优先 `--offline`,接受约 +630KB 内联开销。
+
+ ## Stop Conditions
+
+ - 同一 spec 最多修正并重跑 3 次;仍与标准答案不一致则报告差异、列出已尝试的 spec,不交付错误答案。
+ - 题型不在 13 种之内且无法拆解为多步查询 -> 停止并说明限制,不近似硬套。
+ - 用户只要求"先看效果" -> 跑通一个样例即可,不继续扩展全部题型。
+
+ ## Verification
+
+ 交付前逐项确认:
+
+ - [ ] steps 与 result 已与标准答案核对一致(几何)。
+ - [ ] scene JSON 结构符合 `references/schema.md`。
+ - [ ] HTML 为单文件自包含,浏览器直接打开可交互。
+ - [ ] 无网环境已用 `--offline` 验证可打开。
+ - [ ] 自由表达式经 `safe_expr.py` 解析,注入样例被拒绝。
+ - [ ] 产物与模板文件内无 U+FFFD、无 Box Drawing 字符。
+ - [ ] 已用 `present_files` 向用户展示产物。
+
+ ## Output
+
+ - **Outcome**:一个单文件交互式 HTML —— 几何为可旋转的 3D 解题演示(含步骤与精确结果),函数为带参数滑块、实时联动的 2D 图形。
+ - **Done when**:HTML 已生成并展示,且通过 Verification 清单(几何另需 sympy 校验一致)。
+ - **Evidence**:`scene.json`(中间契约)+ `out.html`;几何产物含 steps 数组与精确值/数值双结果;函数产物含参数滑块与联动性质(顶点/零点/渐近线等)。
+
+ ## References
+
+ 按需加载,不要预先全读:
+
+ - `references/schema.md` — 写 spec 或读取 scene、需要字段契约时读。
+ - `references/taxonomy.md` — 需要确认题型 / 函数族 / 立体的支持状态时读。
+ - `references/design.md` — 需要架构决策、渲染要点、阶段规划、验证记录或已知边界时读。
+
+ ## Examples
+
+ 按需加载:
+
+ - `examples/quickstart.md` — 第一次跑通或需要完整命令配方与样例清单时读。
+ - 几何样例 spec:`examples/geom_line_plane_angle.json`、`examples/geom_line_line_angle.json`、`examples/geom_dihedral_angle.json`、`examples/geom_point_plane_distance.json`、`examples/geom_skew_distance.json`、`examples/geom_volume_tetra.json`、`examples/geom_parallel_perp.json`、`examples/geom_circumsphere.json`、`examples/geom_insphere.json`、`examples/geom_three_views.json`、`examples/geom_net.json`、`examples/geom_surface_path.json`、`examples/geom_surface_volume.json`、`examples/geom_pyramid_apex_angle.json` — 需要构造同类题目时读,改造其 solid/params/query 即可。
+ - 函数样例 spec:`examples/func_quadratic.json`、`examples/func_custom.json`、`examples/func_multi.json` — 需要函数产物的参数写法时读。
+
+ ## Scripts
+
+ 按调用链使用,不要跳步:
+
+ - `scripts/geometry/geometry_solver.py` — `python3 geometry_solver.py <spec.json> <scene.json>`;返回 scene JSON(points/edges/steps/result 等)。
+ - `scripts/geometry/build_html.py` — `python3 build_html.py <scene.json> <out.html> [--offline]`;返回单文件 HTML 路径。
+ - `scripts/geometry/solids.py` — 立体积木库(8 种立体的参数化标准顶点 labeling 与 edges);新增立体在此加 vertices/edges。
+ - `scripts/geometry/template_3d.html` — Three.js r128 + CSS2DRenderer 中文标签模板,含数据注入占位。
+ - `scripts/function/function_engine.py` — `python3 function_engine.py <family> <params.json> <scene.json>`;返回函数 scene JSON,支持 custom 与 multi。
+ - `scripts/function/build_html.py` — `python3 build_html.py <scene.json> <out.html>`;返回单文件 HTML(前端零求值)。
+ - `scripts/function/function_families.py` — 7 个函数族的参数定义(默认/范围/步长);新增函数族在此加项。
+ - `scripts/function/safe_expr.py` — 递归下降 AST 安全表达式解析器;`SafeExpr(expr).eval({"x": v})`。
+ - `scripts/function/template_2d.html` — Canvas2D + 参数滑块模板,含 `f()` / `computeProps()` 分支。
+
+ ## Related Skills
+
+ - `teach-eli5` — 把概念讲给外行听的教学页;本技能产出可交互演示,它产出图文讲解。
+ - `curriculum-design` — 课程与教案设计,本技能可作为课堂互动素材。
+ - `grasp` — 十维认知框架与学习路线图,用于学习者的系统自学。