简体中文 | English
这是一个基于Flask的Web应用程序,可以将数学公式转换为交互式3D可视化图形。用户可以输入多个数学公式,系统会实时生成对应的3D图形,并支持历史记录管理。
- 支持任意包含x和y变量的数学公式的3D可视化
- 支持多函数同时输入和对比分析
- 可以动态添加多个函数输入框
- 提供两种显示模式:
- 所有函数叠放显示:在同一个3D空间中显示所有函数,方便直观对比
- 每个函数单独显示:每个函数独立显示在单独的3D空间中,便于详细观察
- 交互式3D图形展示,支持旋转、缩放和平移
- 公式历史记录保存和管理
- 支持一键复用历史公式
- 内置常用公式示例
- 响应式设计,适配各种设备
- 启动应用后,访问主页面
- 在输入框中输入数学公式,例如:
x**2 + y**2 - 需要添加更多公式时,点击"+"按钮添加新的输入框
- 在可视化设置中选择显示模式:
- Show All Functions Together:所有函数在同一空间显示
- Show Each Function Separately:每个函数单独显示
- 点击"Generate Graphs"按钮或按回车键
- 3D图形将会显示在下方
- 可以使用鼠标进行以下操作:
- 左键拖动:旋转视角
- 右键拖动:平移视角
- 滚轮:缩放视图
-
变量名要求
- 必须使用
x和y作为变量名 - 变量名区分大小写,必须使用小写
- 公式必须同时包含这两个变量
- 不支持其他变量名(如 a, b, z 等)
- 必须使用
-
运算符
- 加法:
+ - 减法:
- - 乘法:必须使用
*(不能省略,如2x要写成2*x) - 除法:
/ - 幂运算:
**(如 x² 要写成x**2) - 支持括号:
()(用于控制运算优先级)
- 加法:
-
支持的数学函数
- 三角函数:
sin(x),cos(x),tan(x) - 反三角函数:
asin(x),acos(x),atan(x) - 双曲函数:
sinh(x),cosh(x),tanh(x) - 指数和对数:
exp(x),log(x)(自然对数),log10(x) - 平方根:
sqrt(x) - 绝对值:
abs(x)
- 三角函数:
-
常数
- 使用小数点:
0.5,2.0等 - 科学记数法:
1e-3,2e5等 - π:可以使用
pi - 自然对数的底数 e:可以使用
E
- 使用小数点:
x**2 + y**2 # 抛物面
sin(x) + cos(y) # 波浪面
sqrt(x**2 + y**2) # 圆锥面
exp(-((x**2 + y**2)/2)) # 高斯钟面
sin(sqrt(x**2 + y**2)) # 水波纹
2*x**2 - 3*y**2 # 马鞍面
pi*sin(x)*cos(y) # 周期性波浪
log(x**2 + y**2 + 1) # 对数面
abs(x) + abs(y) # 金字塔
x**2 + y**2 与 2*x**2 + 2*y**2 # 比较不同系数的抛物面
sin(x) + cos(y) 与 sin(2*x) + cos(2*y) # 比较不同频率的波浪
x**2 - y**2 与 x**2 + y**2 # 比较马鞍面和抛物面
错误示例 正确写法 说明
2x + y 2*x + y 乘法必须使用 *
x^2 + y^2 x**2 + y**2 幂运算必须使用 **
X + Y x + y 变量必须使用小写
sin x sin(x) 函数必须使用括号
x² x**2 必须使用 ** 表示幂
z = x + y x + y 不需要写 z =
- 公式计算范围默认在 [-5, 5] 之间
- 避免在计算范围内出现无意义的值(如除以零)
- 复杂公式的计算可能需要较长时间
- 如果公式出错,系统会返回错误信息
- 克隆仓库:
git clone https://github.com/ZeyuPing/MaVis.git
cd MaVis- 安装Miniconda(如果尚未安装):
对于 Windows:
- 访问 Miniconda官网
- 下载并运行 Windows 安装程序(.exe文件)
- 按照安装向导完成安装
对于 macOS:
# Intel芯片
brew install miniconda
# 或使用curl下载安装脚本
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
bash Miniconda3-latest-MacOSX-x86_64.sh
# Apple Silicon (M1/M2)芯片
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
bash Miniconda3-latest-MacOSX-arm64.sh对于 Linux:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh- 创建并激活Conda环境:
Windows:
# 打开Anaconda Prompt或PowerShell
conda create -n mavis python=3.10
conda activate mavismacOS/Linux:
# 确保conda命令可用(可能需要重新打开终端)
source ~/.bashrc # Linux
source ~/.zshrc # macOS
# 创建并激活环境
conda create -n mavis python=3.10
conda activate mavis- 安装依赖:
pip install -r requirements.txt- 运行应用:
python app.py- 访问应用: 打开浏览器访问 http://localhost:5000
- 后端:Flask (Python)
- 前端:HTML5, CSS3, JavaScript
- 数据可视化:Plotly.js
- 数学计算:NumPy, SymPy
- 数据存储:SQLite3
- Flask==3.0.2
- numpy==1.26.4
- matplotlib==3.8.3
- pandas==2.2.1
- scipy==1.12.0
- Pillow==10.2.0
- plotly==5.19.0
- sympy==1.12
--------------------- 以下内容面向开发者 ---------------------
MaVis/
├── app.py # Flask应用主文件
├── requirements.txt # 项目依赖
├── formulas.db # SQLite数据库文件
├── exsample_figs/ # 示例图片目录
│ ├── exsample.png # 单函数示例图
│ ├── multi_function.png # 多函数对比图
│ ├── settings.png # 设置面板图
│ └── title.png # 标题图
├── static/
│ ├── script.js # 前端JavaScript
│ └── style.css # 样式表
└── templates/
└── index.html # 主页面模板
- URL:
/ - HTTP方法:
GET - 功能:渲染应用程序主页面
- 实现函数:
app.py中的index() - 返回:渲染后的
index.html页面
- URL:
/plot - HTTP方法:
POST - 功能:根据提供的公式生成3D图形数据
- 实现函数:
app.py中的plot() - 请求体:
{ "formula": "数学公式字符串" } - 处理流程:
- 接收前端发送的公式
- 调用
create_3d_plot()生成图形数据 - 将图形数据转换为Plotly格式
- 返回:JSON格式的Plotly图形数据
- URL:
/history - HTTP方法:
GET - 功能:获取所有已保存的公式记录
- 实现函数:
app.py中的get_history() - 处理流程:
- 查询SQLite数据库中的历史记录
- 将记录转换为JSON格式
- 返回:
[ { "id": "记录ID", "formula": "公式内容", "created_at": "创建时间" } ]
- URL:
/delete/<formula_id> - HTTP方法:
DELETE - 功能:删除指定ID的公式记录
- 实现函数:
app.py中的delete_formula(formula_id) - 处理流程:
- 接收要删除的记录ID
- 从数据库中删除对应记录
- 返回:
{ "success": true, "message": "记录删除成功" }
- 后端扩展
- 在
app.py中添加新的路由和处理函数 - 使用
create_3d_plot()函数处理新的图形生成需求
- 前端扩展
- 在
script.js中添加新的交互功能 - 在
style.css中添加新的样式 - 在
index.html中添加新的页面元素
- 性能考虑
- 复杂的数学表达式可能需要较长处理时间
- 点数过多会影响渲染性能,默认设置为50x50个点
- 建议在开发环境下不要使用过大的计算范围
- 安全考虑
- 系统会验证输入的数学表达式
- 使用
sympify进行安全的表达式解析 - 数据库操作使用参数化查询防止SQL注入
- Fork 项目仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目采用 MIT 许可证



