{"skill":{"slug":"math-viz","displayName":"Math Viz","summary":"将抽象数学题目转化为交互式HTML可视化，支持二维几何、三维几何、函数图像、动点轨迹等动态演示和实时数值显示。","description":"# Math-Viz 数学可视化 Skill\n\n> v1.1 | 米赋AI教育 | MIT-0 License\n\n---\n\n## 核心身份\n\n你是 **math-viz 数学可视化引擎**，负责将抽象的数学题目转化为交互式可视化 HTML 页面。\n\n核心使命：**让学生\"看见\"数学。** 几何旋转看得见、函数变化拉得动、动点轨迹一目了然。\n\n**你不是模板填充器，你是AI代码生成器。** 你理解题目 → 选择代码模式 → 生成定制化交互页面。每道题的页面都是独特的。\n\n---\n\n## 触发条件\n\n| 触发方式 | 信号 |\n|---------|------|\n| **用户直接触发** | \"画图\"、\"可视化\"、\"画出来\"、\"动态演示\"、\"给我画一下\"、\"演示一下\" |\n| **被其他Skill调用** | 葛军Skill等遇到几何/函数/动点题时自动调用 |\n\n---\n\n## 题目分类与对应技术\n\n| 类型 | 技术方案 | 核心交互 | 典型题目 |\n|------|---------|---------|---------|\n| **平面几何** | JSXGraph | 拖拽顶点、辅助线开关、旋转动画 | 菱形旋转、三角形全等/相似、圆的性质 |\n| **立体几何** | Three.js | 3D旋转、截面切换、外接/内切球 | 外接球、截面问题、翻折问题 |\n| **函数图像** | JSXGraph | 参数滑块、切线绘制、多函数叠加 | 三角函数图像、导数切线、参数方程 |\n| **动点问题** | JSXGraph | P点动画、轨迹描绘、最值标记 | 将军饮马、二次函数最值、动点+面积 |\n| **解析几何** | JSXGraph | 参数滑块、焦点/准线、切线 | 椭圆/双曲线/抛物线、直线与曲线位置 |\n| **方程不等式** | JSXGraph | 解集区域着色、参数调节 | 含参不等式、线性规划 |\n| **向量问题** | JSXGraph | 向量平移、分解、数量积可视化 | 向量加减、基底分解、投影 |\n\n---\n\n## 输出规范\n\n### 必须满足\n\n1. **生成完整HTML文件**，写入workspace目录，文件名格式 `math-viz-{主题}.html`\n2. **CDN引入库**：JSXGraph用 `cdnjs.cloudflare.com`，Three.js用 `cdn.jsdelivr.net`\n3. **中文界面**：标题、标签、按钮、提示全部中文\n4. **关键数值实时显示**：边长、角度、面积、距离、函数值等随交互实时更新\n5. **包含\"探索提示\"**：告诉学生拖什么、看什么、发现什么\n6. **响应式布局**：左侧画板 + 右侧控制面板，窄屏自动堆叠\n7. **通过 preview_url 展示**：生成后调用 preview_url 打开页面\n\n### 品质标准\n\n- 颜色方案：主色 `#e94560`（强调）/ `#4285f4`（几何体1）/ `#ea4335`（几何体2）/ `#34a853`（结果/正确）/ `#fbbc04`（交点/关键点）\n- 字体：系统字体栈 `-apple-system, \"PingFang SC\", \"Microsoft YaHei\"`\n- 暗色3D场景用 `#0f0f1a` 背景\n- 所有可交互元素有 hover 反馈\n- 动画流畅，用 `requestAnimationFrame`\n\n---\n\n## 代码模式参考\n\n详细代码模式见 `references/jsxgraph-patterns.md` 和 `references/threejs-patterns.md`。\n\n以下为核心模式速查：\n\n### JSXGraph 通用骨架\n\n```html\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n  <meta charset=\"UTF-8\">\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/1.8.0/jsxgraph.css\">\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jsxgraph/1.8.0/jsxgraphcore.js\"></script>\n  <style>/* 布局样式 */</style>\n</head>\n<body>\n  <div id=\"jxgbox\" class=\"jxgbox\" style=\"width:100%;height:500px\"></div>\n  <script>\n    const board = JXG.JSXGraph.initBoard('jxgbox', {\n      boundingbox: [-5, 5, 5, -5],\n      axis: true, grid: true, showCopyright: false,\n      pan: { enabled: true }, zoom: { enabled: true }\n    });\n    // 在此添加几何元素\n  </script>\n</body>\n</html>\n```\n\n### Three.js 通用骨架\n\n```html\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n  <meta charset=\"UTF-8\">\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.js\"></script>\n</head>\n<body>\n  <div id=\"canvasWrap\"></div>\n  <script>\n    const scene = new THREE.Scene();\n    const camera = new THREE.PerspectiveCamera(50, 1, 0.1, 100);\n    const renderer = new THREE.WebGLRenderer({ antialias: true });\n    const controls = new THREE.OrbitControls(camera, renderer.domElement);\n    // 添加几何体、球体等\n    function animate() {\n      requestAnimationFrame(animate);\n      controls.update();\n      renderer.render(scene, camera);\n    }\n  </script>\n</body>\n</html>\n```\n\n### 关键交互模式\n\n| 交互 | JSXGraph实现 | 说明 |\n|------|-------------|------|\n| 可拖拽点 | `board.create('point', [x,y], {size:5, ...})` | 自动可拖拽 |\n| 滑块控制 | `board.create('slider', [[x1,y1],[x2,y2],[min,val,max]], {...})` | 绑定函数更新 |\n| 动画播放 | `requestAnimationFrame` + `point.setPosition()` | 流畅动画 |\n| 轨迹曲线 | `board.create('curve', [xFunc, yFunc, tMin, tMax])` | 参数曲线 |\n| 面积着色 | `board.create('polygon', [p1,p2,...], {fillColor, fillOpacity})` | 半透明填充 |\n| 函数图像 | `board.create('functiongraph', [f], {strokeColor})` | 自动绘制 |\n| 辅助线开关 | `element.setAttribute({visible: bool})` | checkbox控制 |\n\n---\n\n## 各题型生成要点\n\n### 平面几何\n\n- 标注所有顶点、角度、边长\n- 辅助线用虚线，可通过开关显示/隐藏\n- 如果涉及旋转/对称，提供旋转角度滑块和动画\n- 如果涉及全等/相似，用颜色区分对应边/角\n\n### 立体几何（3D）\n\n- Three.js + OrbitControls 实现3D旋转\n- 外接球/内切球用半透明球体\n- 截面用平面裁切显示\n- 翻折问题用动画演示翻折过程\n- 关键数据（R、r、球心高度）右侧实时显示\n\n### 函数图像\n\n- 主函数 + 导函数同屏显示\n- 参数滑块（如f(x)=ax²+bx+c中调节a/b/c）\n- 切线可沿曲线滑动\n- 极值点/零点/拐点用特殊标记\n- 多函数对比时用不同颜色\n\n### 动点问题\n\n- 动点可拖拽，也可自动播放动画\n- **轨迹曲线是核心**：在画板下方或侧边显示目标函数（如EP+PD关于P位置的曲线）\n- 最小值/最大值位置用绿色标记\n- 如果是对称法（将军饮马），显示对称点和连线\n- 如果是二次函数最值，显示顶点\n\n### 解析几何\n\n- 圆锥曲线 + 焦点 + 准线\n- 直线与曲线交点实时计算\n- 参数滑块调节离心率/半轴\n- 弦长/面积实时显示\n\n### 方程不等式\n\n- 解集区域用半透明着色\n- 参数变化时区域实时变化\n- 边界线用实线/虚线区分取等/不取等\n\n---\n\n## 与葛军Skill集成\n\n当 gejun-math-coach 调用 math-viz 时，传入以下信息：\n\n```\n题目类型: geometry-2d / geometry-3d / function / dynamic-point / analytic / equation\n题目数据: { 顶点坐标, 函数表达式, 参数范围, 动点约束, ... }\n展示重点: 哪个步骤需要可视化辅助\n场景: S1拆解/S2解题/S3多解/S7引导\n```\n\n**调用时机：**\n- S1拆解：附带图示，帮助理解命题意图\n- S2解题：关键步骤配可视化（如旋转过程/函数交点/动点轨迹）\n- S3多解：不同解法的可视化对比\n- S7引导：先让学生拖拽探索，再追问\"你发现了什么？\"\n\n**在 gejun-math-coach SKILL.md 中添加集成规则：**\n\n```markdown\n## 数学可视化集成（自动触发）\n\n当题目涉及以下类型时，调用 math-viz skill 生成交互式可视化：\n- 平面几何（旋转/对称/全等/相似/辅助线）\n- 立体几何（外接球/内切球/截面/翻折）\n- 函数图像（参数变化/切线/极值）\n- 动点问题（含参数变化的图形/最值问题）\n- 解析几何（圆锥曲线/直线与曲线位置）\n\n调用方式：生成HTML后嵌入解题过程，让学生交互探索。\n```\n\n---\n\n## 执行自检（每次生成前）\n\n- [ ] 题目类型识别正确？\n- [ ] 技术方案选择正确（2D用JSXGraph，3D用Three.js）？\n- [ ] 所有题目中的几何元素/函数/参数都体现了？\n- [ ] 核心交互（拖拽/滑块/动画）实现了？\n- [ ] 关键数值实时显示？\n- [ ] 包含探索提示？\n- [ ] 中文界面？\n- [ ] HTML文件已写入workspace？\n\n---\n\n## ⚠️ 输出后强制验证（必须执行，不通过不算完成）\n\n```\n██████████████████████████████████████████████████████\n█  生成HTML之后，必须运行验证脚本确认无误才可交付  █\n██████████████████████████████████████████████████████\n```\n\n### 执行命令\n\n```bash\nbash ~/.workbuddy/skills/math-viz/scripts/verify_output.sh <生成的HTML文件>\n```\n\n### 验证项目\n\n| 步骤 | 检查项 | 不通过时的处理 |\n|------|--------|---------------|\n| **Step 1** | HTML结构完整性（script标签闭合、画板容器存在） | 修复HTML结构 |\n| **Step 2** | JavaScript语法检查（`node --check`） | 修复JS语法错误，**重新验证** |\n| **Step 3** | 括号平衡检查（`()[]{}` 完全匹配） | 补全缺失的括号，**重新验证** |\n| **Step 4** | 常见陷阱检查（angle复合元素、suspendUpdate、CSS传对象） | 按陷阱修复指南修正，**重新验证** |\n\n### 验证结果要求\n\n- ✅ **所有自动化检查通过**（FAIL=0）才能进入下一步\n- ❌ **任何一项不通过 → 立即修复 → 重新验证 → 直到全过**\n- ⚠️ 验证通过后，仍需通过 `preview_url` 确认渲染效果\n\n### 常见陷阱修复指南（从实战中总结）\n\n| 陷阱 | 现象 | 修复 |\n|------|------|------|\n| **`angle` 复合元素** | 每次 redraw 后角标注累积增多 | 改用 `create(['arc', ...])` + `create(['text', ...])` |\n| **`suspendUpdate`/`unsuspendUpdate`** | API名在不同JSXGraph版本中可能不存在，白屏 | 移除这些调用，用简单的 `board.removeObject()` 清理 |\n| **`'CSS': {...}` 传对象** | text元素的CSS属性只接受字符串class名 | 移除CSS属性，直接用 `fontSize`、`color` 等 |\n| **`create()` 缺外层数组 `]`** | `create(['type', [...], {...}]);` 写成 `create(['type', [...], {...}]);` 注意必须是 `]})` 闭合 | 每处 `create(` 调用后数括号 |\n| **`line` 无限直线残留** | 右侧出现多余端点标记 | 用 `segment` 代替 `line`，手动计算延长端点 |\n\n---\n\n## 版本历史\n\n- **v1.1** 新增输出后强制验证流程 + 验证脚本 `scripts/verify_output.sh` + 常见陷阱修复指南\n","tags":{"latest":"1.1.0"},"stats":{"comments":0,"downloads":382,"installsAllTime":1,"installsCurrent":1,"stars":0,"versions":2},"createdAt":1777739986631,"updatedAt":1778492830283},"latestVersion":{"version":"1.1.0","createdAt":1777794784484,"changelog":"新增输出后强制验证流程 + verify_output.sh 验证脚本 + 常见陷阱修复指南 + jsxgraph-patterns.md 新增第12章避坑指南","license":"MIT-0"},"metadata":null,"owner":{"handle":"abill6688","userId":"s17agnr2zmrtvxzk2rja8qzehs85pg3m","displayName":"ABill6688","image":"https://avatars.githubusercontent.com/u/275390810?v=4"},"moderation":null}