使用VLM将几何题目转换为动态图形的教学辅助工具。
- 几何题 → 动图: 拍照上传几何题目,自动生成解题动画
- 草图 → 精确图: 输入题目文本+手绘草图,生成印刷级精确图形
- 交互式图形: 基于 GeoGebra,支持拖动顶点、缩放、测量
- 动画播放: 逐行执行 GeoGebra 命令,展示作图过程
- 前端: Next.js 14, React, TypeScript
- 样式: Tailwind CSS, shadcn/ui
- 图形: GeoGebra 嵌入
- VLM: OpenRouter API (GPT-4 Vision)
- Node.js 18+
- npm 或 yarn
- OpenRouter API Key
git clone https://github.com/01luyicheng/geo-motion.git
cd geo-motioncd frontend
npm install复制示例文件:
cp .env.local.example .env.local编辑 .env.local,填入你的 OpenRouter API Key:
OPENROUTER_API_KEY=sk-or-v1-your-api-key-here获取 API Key:OpenRouter 官网
npm run dev-
Fork/导入项目
- 登录 Vercel
- 点击 "Add New Project"
- 导入 GitHub 仓库
-
配置构建设置
- Framework Preset: Next.js
- Root Directory:
frontend - Build Command:
npm run build - Output Directory:
.next
-
添加环境变量
- 进入项目 Settings → Environment Variables
- 添加
OPENROUTER_API_KEY
-
部署
- 点击 Deploy
- 完成后会获得生产环境 URL
FROM node:18-alpine
WORKDIR /app
COPY frontend/package*.json ./
RUN npm ci --only=production
COPY frontend/. .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]构建并运行:
docker build -t geo-motion .
docker run -p 3000:3000 -e OPENROUTER_API_KEY=your-key geo-motion如需静态托管(CDN):
# 修改 next.config.js
# output: 'export'
npm run build
# 输出到 out/ 目录- 打开首页,点击上传区域
- 选择几何题目的图片(支持 JPG、PNG)
- 等待 VLM 分析完成
- 跳转到分析结果页
- GeoGebra 图形: 可拖动顶点、缩放、测量
- 已知条件: 列出题目给出的条件
- 求解目标: 明确需要求解的内容
- 解题步骤: 详细的解题过程
- 播放: 逐行执行 GeoGebra 命令
- 暂停: 暂停动画
- 重置: 清空图形重新开始
- 调速: 调整动画播放速度
- 复制 GeoGebra 命令,粘贴到 GeoGebra 软件
- 截图保存生成的图形
分析几何题目图片
请求:
{
"image": "data:image/jpeg;base64,/9j/4AAQ..."
}响应:
{
"success": true,
"data": {
"id": "abc123",
"geogebra": "A = (0, 0)\nB = (5, 0)\n...",
"conditions": ["AB = AC", "∠A = 60°"],
"goal": "求∠B的度数",
"solution": ["步骤1...", "步骤2..."]
}
}根据文本生成精确图形
请求:
{
"text": "已知三角形ABC,AB=AC,顶角60度",
"sketch": "data:image/jpeg;base64,..."
}geo-motion/
├── docs/
│ ├── SPEC.md # 功能规格
│ ├── ARCHITECTURE.md # 技术架构
│ ├── API.md # API文档
│ └── ISSUES.md # 已知问题
├── frontend/
│ ├── src/
│ │ ├── app/ # 页面和API路由
│ │ │ ├── page.tsx # 首页
│ │ │ ├── layout.tsx # 布局
│ │ │ ├── analyze/[id]/ # 分析结果页
│ │ │ └── api/ # API路由
│ │ │ ├── analyze/route.ts
│ │ │ └── generate-graphic/route.ts
│ │ ├── components/ # 组件
│ │ │ ├── ImageUploader.tsx # 图片上传
│ │ │ ├── GeoGebraViewer.tsx # GeoGebra嵌入
│ │ │ └── ui/ # shadcn组件
│ │ ├── lib/ # 工具函数
│ │ │ └── openrouter.ts # VLM调用
│ │ └── types/
│ │ └── index.ts # 类型定义
│ ├── package.json
│ ├── next.config.js
│ ├── tailwind.config.js
│ └── tsconfig.json
└── README.md
- 检查图片清晰度,确保几何图形可见
- 检查 OPENROUTER_API_KEY 是否有效
- 查看浏览器控制台和网络请求
- 检查网络连接(需要访问 geogebra.org)
- 清除浏览器缓存重试
编辑 frontend/src/lib/openrouter.ts,修改 model 参数:
model: 'anthropic/claude-3-opus-20240229' // 或其他模型可用模型列表:OpenRouter Models
- 基础架构搭建
- 图片上传功能
- VLM 分析接口
- GeoGebra 嵌入
- 动画播放控制
- 图形导出功能
- 历史记录保存
- 用户账户系统
欢迎提交 Issue 和 PR!
MIT License