edu-analytic-geometry
把一道解析几何题解成一个自包含的交互教学网页:左栏题面 + 动态控制台(一个 可变参数滑块驱动实时重算的几何量 + 理论范围/定值指示),中栏 KaTeX 分步解析,右栏 2D Canvas 动态几何画板(椭圆/双曲线/抛物线/圆 + 动直线/动点 + 向量 + 标注 + 画笔涂鸦)。 支持三入口——给定文字题、随机出题、上传题目图片识别后解题。覆盖求标准方程、弦长、向量 数量积范围/定值、三角形面积最值、定点、定值(斜率之积)、轨迹、离心率等题型,统一"设含参 直线 x=my+c + 联立 + 韦达 + 换元/常数分离",并由 sympy 精确计算驱动(答案、坐标、步骤 数值、交互引擎的理论范围同源一致)。其它 agent 也可调用本技能生成此类网页。形态与 edu-solid-geometry 平行,但用 Canvas-2D + KaTeX(非 Three.js)。 触发词:解析几何, 圆锥曲线, 椭圆, 双曲线, 抛物线, 直线与圆锥曲线, 焦点弦, 弦长, 数量积取值范围, 向量数量积, 定点问题, 定值问题, 斜率之积, 三角形面积最值, 轨迹方程, 离心率, 解这道解析几何题, 随机出一道圆锥曲线题, 这张图里的解析几何题; analytic geometry, conic sections, ellipse, hyperbola, parabola, chord length, dot product range, fixed point, fixed value, locus, eccentricity, interactive analytic geometry solution page.
How do I install this agent skill?
npx skills add https://github.com/wy51ai/edulab --skill edu-analytic-geometryIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill generates interactive educational webpages for analytic geometry problems using SymPy for calculations and a 2D Canvas for visualization. It is a legitimate educational tool that operates locally and uses well-known resources for its frontend.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 2 issues
What does this agent skill do?
解析几何解题 → 交互网页
这个技能产出什么
一个可直接用浏览器打开的单页 HTML(三栏):
- 左栏:题面 + 动态控制台 —— 一个可变参数滑块(如直线倾斜角 θ / 动点参数 t)驱动实时 重算的几何量(交点坐标、斜率、数量积、弦长、面积…),以及"理论范围条"或"定值指示"。
- 中栏:分步解析(公式用 KaTeX),可一键收起把空间让给画板。
- 右栏:2D Canvas 动态几何画板(圆锥曲线 + 动直线/动点 + 向量 + 点标注 + 网格坐标轴), 叠加画笔涂鸦工具栏。
形态与目标模板 /Users/wuyi/code/code2026/6/template/code_artifact.html 一致。
依赖(重要)
计算核心 lib/analytic_kernel.py 依赖 sympy。运行脚本前先确认有能 import sympy 的
解释器:python3 -c "import sympy"(本机用 /opt/homebrew/bin/python3.11,sympy 1.14)。
缺库时:若 import 报错(sympy 或后续任何库),先询问用户是否安装,同意后再装
(python3 -m pip install <库名>)或换一个已装该库的解释器;不要未经询问直接装。
下文 python3 均指这个能跑通依赖的解释器。
工作流程
第 1 步:得到 problem spec(三入口归一)
把题目整理成结构化 spec(曲线类型与参数、已知点/条件、所求类型与对象、语言)。
- 文字题:直接抽取。
- 图片:视觉读图抽取,并把识别到的题目回显给用户确认(题面/曲线/参数/所求/语言)再继续。
- 随机出题:选曲线 + 题型,随机参数 → kernel 求解,用
analytic_kernel.is_clean(...)判答案 是否规整,不规整就重抽。
输出语言跟随提示词语言:英文提示 → 英文网页,中文 → 中文。spec 记下
language。
第 2 步:用 kernel 精确计算(不要心算)
按 references/conventions.md 的解法配方,调用 lib/analytic_kernel.py 与 lib/conics.py:
conics.ellipse/hyperbola/parabola/circle(...)得曲线对象(精确 a,b,c、焦点、顶点、准线、 渐近线、eq_latex、以及给前端引擎的boarddict)。chord_setup(conic, through)联立含参直线x=my+c得 y 的二次方程 + 韦达量(精确)。- 目标量:
dot_product_expr/chord_len_sq_expr/triangle_area_expr/slope_product_central… - 取值范围:
range_over_m(expr, horizontal_valid=?)—— 含开闭端点判定(关键正确性点,见下)。 - 定值:
is_constant_in_m(expr)。
可命令行自检 kernel:
python3 lib/analytic_kernel.py # 旗舰题内置断言自检
⚠️ 端点开闭 = 正确性命门:过焦点的弦,水平线(x 轴,θ=0)与竖直线(θ=90)都是合法直线, 它们取到的端点要计入。例:椭圆 MA·MB 题,x 轴取到 −3、竖直线取到 7/4,故答案是闭区间
[-3, 7/4](很多教辅误写成开的(-3, 7/4])。range_over_m已据此判定,且这样答案与交互 工具一致——拖滑块到 0° 就读到 −3。抛物线焦点弦的"轴方向"是退化线(只交一点),其极限端点 不计入(horizontal_valid=False或限制 param 范围)。
第 3 步:组装数据并注入模板
📍 输出位置 & 唯一产物(最重要):交付给用户的只有一个
.html,写到当前工作目录 (Path.cwd())(除非用户显式指定路径)。cwd 里不要留任何别的文件——构建脚本(.py)、__pycache__、自检截图(.png)、临时文件都不是交付物,一律放/tmp或用完即删。 也绝不要写进技能自身目录(skills/edu-analytic-geometry/output/是技能内部样例)。
把"组装数据 + 注入模板"的构建脚本写到临时目录(如 /tmp/ag_build.py),让它只把 .html
写到 cwd;脚本拼出 lesson / steps / board 数据(schema 见 references/problem-schema.md),
调用 generate.render_html(data, out) 注入 template/board.html,跑完即删脚本:
# 构建脚本放 /tmp(不要放 cwd):/tmp/ag_build.py
import sys; sys.dont_write_bytecode = True # 不生成 __pycache__
sys.path.insert(0, "<技能目录>/scripts")
import generate
from pathlib import Path
data = {"lesson": {...}, "steps": [...], "board": {...}}
out = Path.cwd() / "solution-<题目简述>.html" # 唯一产物,落在用户当前目录
generate.render_html(data, out)
python3 -B /tmp/ag_build.py && rm -f /tmp/ag_build.py # -B 不写字节码;跑完删临时脚本,cwd 只剩 .html
steps[*].content里的数值直接引用 kernel 结果(用K.tex(...)输出 LaTeX),模型只负责 组织讲解文字(按目标语言)。board用 kernel 给的曲线boarddict、精确点坐标、param、derived构造序列、readouts、rangeBar(范围题)/constant(定值题)/answerBand(形状参数题,如离心率范围)。- 形状参数题(滑块=离心率 e 等):自然动态量是曲线本身的形状而非动直线/动点时,让滑块=该参数,
把曲线
a/b/c、焦点、动点坐标写成@param的表达式字符串(引擎每帧重绘曲线/焦点/渐近线), 配status读数显示不等式状态、answerBand在参数轴高亮答案区间。见 conventions「形状参数题」。 - 可直接照抄的范本:
scripts/generate.py里 6 个build_*覆盖各类交互范式:ellipse_dot_range(范围条)、ellipse_chord_range、ellipse_area_max、ellipse_slopeprod_const(定值·中心对称)、parabola_dot_const(定值·抛物线)、hyperbola_ecc_range(形状参数:滑块=e,曲线随之重绘 +status+answerBand)。
已注册题直接出(-B 不写字节码;不传路径默认写技能 output,交付给用户时务必改成 cwd 下的 .html):
python3 -B scripts/generate.py list # 列出题型
python3 -B scripts/generate.py ellipse_dot_range ./sol.html
python3 -B scripts/generate.py all ./out_dir # 全部题型
第 4 步:自检(正确性方案)
- kernel 答案 == 答案卡
lesson.answer== 末步骤展示值 == JS 标准位/扫段重算值,四者一致 (build_*内已加assert)。 rangeBar端点来自 kernel 的range_over_m;constant值来自 kernel 的定值。- 起本地静态服务(服务输出文件所在目录,即 cwd)用预览检查:无控制台报错、KaTeX 正常、
滑块实时重算正确、范围条/定值/定点/轨迹行为符合、画笔与收起面板可用。
(技能仓库内开发时可用
.claude/launch.json的ag-preview,端口 4601;别处运行就对 cwd 起 一个临时静态服务。) - 自检截图只给你自己看:preview 工具直接返回图像,不要把
.png存到 cwd;本地静态服务只读不写、 不产生文件。自检产生的任何临时文件(构建脚本.py、截图.png、__pycache__等)交付前一律清掉。
⚠️ 必须关闭你开过的端口/服务:预览一结束立即停掉,绝不留占用端口的进程。
- preview 工具开的:
preview_stop(传 serverId)。- 直接起的
http.server:用完kill,或lsof -nP -iTCP:<port> -sTCP:LISTEN确认已释放。- 交付前确认端口已释放再告诉用户。开了不关 = 未完成自检。
第 5 步:交付
成品写在用户当前工作目录(cwd),命名形如 solution-<题目简述>.html,把路径告诉用户,
可直接浏览器打开。交付前确认:(1) 成品在 cwd、不在技能目录;(2) 没有遗留本次预览
开启的本地服务/端口;(3) cwd 里只新增了这一个 .html——没有 .py / .png /
__pycache__ / 临时文件(用 git status 或 ls 核一眼,有就删掉)。
扩展
- 加题型:在
analytic_kernel.py加目标量函数(写成 m 的表达式)+ 复用range_over_m/is_constant_in_m;在generate.py加一个build_*,选定交互范式(范围条 / 定值 / 定点 / 轨迹 trace / 形状参数 answerBand)。见references/conventions.md配方表。 - 加曲线:
conics.py已有椭圆/双曲线/抛物线/圆;前端board.html引擎已支持四类渲染、 渐近线、准线方向。新曲线在两处各加一份即可。 - 加交互构造:
board.html的buildSceneswitch 是构造库(line_through_angle、intersect_line_conic、point_on_conic、point_reflect、tangent_at、foot_perp…), 按需扩充并在 schema 文档登记。
目录
template/board.html— 数据驱动模板(通用 2D 渲染器 + 参数引擎 + 数据岛__LESSON_DATA__)lib/conics.py— 圆锥曲线 sympy 定义库(特殊点 / LaTeX / board dict)lib/analytic_kernel.py— sympy 精确求解核心(联立·韦达·范围·定值)scripts/generate.py— 注入模板 + 5 个 build_* 范本 + 批量/单题出题references/problem-schema.md— 数据格式(board 引擎 schema)references/conventions.md— 标准式、解法配方表、韦达/换元套路、端点开闭、自检
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/wy51ai/edulab/edu-analytic-geometry">View edu-analytic-geometry on skillZs</a>