将数学题图片转换为可交互的 GeoGebra 图形文件(.ggb),支持题目文本显示和动态演示。
生成XML之前,必须先完成题目结构化理解。禁止直接凭直觉写坐标!
所有文本框之间必须保持足够间距,避免重叠:
| 规范 | 要求 | 示例 |
|---|---|---|
| ------ | ------ | ------ |
| 行间距 | 相邻文本框y坐标差 >= 1.5个单位 | y=8 和 y=6 差2单位 |
| 分组间距 | 题目/答案/分析之间 >= 2个单位 | 题目在y=8,答案在y=5 |
| 与图形间距 | 文本与最近图形 >= 1个单位 | 文本y=5,图形顶点y<=4 |
| 边距 | 文本不超出坐标系边界 | 检查xZero/yZero和scale |
生成图形的方向、顶点顺序必须与原题图片一致,方便对照:
必须使用GeoGebra提供的工具命令实现约束:
| 约束类型 | 正确工具 | 错误做法 |
|---|---|---|
| ---------- | ---------- | ---------- |
| 点在线段上 | Point工具(输入线段) | 直接写坐标 |
| 中点 | Midpoint工具 | 坐标计算 |
| 交点 | Intersect工具 | 手动计算 |
| 垂线 | PerpendicularLine | 斜率计算 |
| 平行线 | Line工具(输入点+平行线) | 斜率相同 |
| 角平分线 | AngleBisector工具 | 手动画线 |
| 圆+半径 | Circle工具(圆心+半径/点) | 手动画圆 |
| 垂足 | PerpendicularLine+Intersect | 投影计算 |
| 线段等长 | Segment+长度标注 | 目测坐标 |
| 角度标注 | Angle工具 | 文本标注冒充 |
用户图片 → [步骤1] 题目结构化理解
↓
[步骤2] 约束关系建模
↓
[步骤3] 生成XML
↓
[步骤4] 打包ggb + 质量验证
对每道题,在生成XML前必须先明确以下信息:
| 类型 | 识别关键词 | 典型特征 |
|---|---|---|
| ------ | ----------- | ---------- |
| 静态几何 | 求长度、面积、角度 | 固定图形,所有点位置确定 |
| 动态几何 | 动点、移动、范围、最值 | 存在可拖动点,探究变化规律 |
| 函数图像 | 抛物线、直线、交点 | 坐标系背景,有函数表达式 |
| 尺规作图 | 作图、作一条线、构造 | 需要保留作图痕迹 |
| 证明题 | 求证、证明 | 需要标注已知条件和辅助线 |
□ 点:顶点(A,B,C...)、特殊点(中点、垂足、交点、动点)
□ 线:边、对角线、中线、高线、角平分线、中位线、延长线、辅助线
□ 圆:圆心、半径、直径、切线、弦
□ 角:直角、等角、特殊角(30°、45°、60°)
□ 形:三角形、四边形(平行四边形/矩形/菱形/正方形/梯形)、圆
从题目文本中识别以下约束类型:
位置约束:
Point约束到线段度量约束:
Distance标注)关系约束:
Midpoint工具Line工具(输入点+平行线)PerpendicularLine工具AngleBisector工具Tangent工具动态约束:
| 元素类型 | 标记方式 | 说明 |
|---|---|---|
| ---------- | ---------- | ------ |
| 已知条件 | 黑色实线、正常粗细 | 题目给定的边、角 |
| 所求目标 | 红色粗线、加粗显示 | 需要求解的线段/角 |
| 辅助线 | 虚线、灰色或绿色 | 为解题添加的线 |
| 隐藏条件 | 标注文本说明 | 如"AB=AC(等腰)" |
根据步骤1提取的信息,建立约束优先级:
1. 先建基础形(三角形/四边形的顶点)
2. 再建关系约束(中点、平行、垂直、点在线上)
3. 然后建辅助元素(延长线、辅助线、圆)
4. 最后建标注(长度、角度、OCR文本)
重要: 如果题目给出具体长度(如AB=10),先按比例设定坐标,再用Text或Caption标注实际长度值。
参照 references/xml-cheatsheet.md 和 references/common-patterns.md 生成XML。
必须遵守的格式规则:
"在XML属性中必须转义为"使用 references/quality-check.md 的清单逐项验证,重点检查:
特征: 求长度、面积、角度
建模要点:
caption或文本标注特征: 动点、求范围/最值
建模要点:
Point工具约束到线段/圆上(可拖动)特征: 抛物线、直线、坐标系
建模要点:
expression元素定义Intersect工具特征: 求证、证明
建模要点:
<!-- 点在线段上(可拖动) -->
<command name="Point">
<input a0="sideBC"/>
<output a0="E"/>
</command>
<!-- 中点 -->
<command name="Midpoint">
<input a0="A" a1="B"/>
<output a0="M"/>
</command>
<!-- 交点 -->
<command name="Intersect">
<input a0="line1" a1="line2"/>
<output a0="D"/>
</command>
<!-- 角平分线 -->
<command name="AngleBisector">
<input a0="B" a1="A" a2="C"/> <!-- ∠BAC的平分线 -->
<output a0="bisector"/>
</command>
<!-- 过点作平行线 -->
<command name="Line">
<input a0="C"/> <!-- 经过的点 -->
<input a1="lineAB"/> <!-- 平行的线 -->
<output a0="parallel"/>
</command>
<!-- 过点作垂线 -->
<command name="PerpendicularLine">
<input a0="C"/> <!-- 经过的点 -->
<input a1="sideAB"/> <!-- 垂直的线段/线 -->
<output a0="perp"/>
</command>
<!-- 圆(圆心+半径) -->
<command name="Circle">
<input a0="O"/> <!-- 圆心 -->
<input a1="3"/> <!-- 半径(数值或线段) -->
<output a0="c1"/>
</command>
<!-- 圆的切线(过圆外一点) -->
<command name="Tangent">
<input a0="P"/> <!-- 圆外点 -->
<input a1="c1"/> <!-- 圆 -->
<output a0="t1"/>
<output a0="t2"/> <!-- 两个切点/切线 -->
</command>
<!-- 角度 -->
<command name="Angle">
<input a0="B" a1="A" a2="C"/> <!-- ∠BAC -->
<output a0="alpha"/>
</command>
详见 references/common-patterns.md 获取完整模式。
见 references/common-patterns.md 中的完整示例。
references/constraint-guide.md - 约束建模深度指南references/xml-cheatsheet.md - XML快速参考与完整元素列表references/common-patterns.md - 常见几何构造模式(含圆、切线、轨迹等)references/quality-check.md - 质量复查机制与约束验证references/problem-analysis-guide.md - 人教版题目理解指南references/dynamic-demo-patterns.md - 动态演示XML模板references/common-misunderstandings.md - 常见理解偏差与修正scripts/pack_ggb.py - ggb打包工具共 1 个版本