全部工具
图形计算

在线 3D 图形计算器:在浏览器里"转一转"数学对象

一款由 WebGL(three.js)驱动的交互式 3D 绘图仪。可渲染精度可调的 z=f(x,y) 曲面、参数空间曲线或 3D 散点点云——支持逐个添加或批量粘贴点。通过 OrbitControls 旋转、缩放与平移,可重置视图并复制散点,全部在浏览器本地运行。

~~
3D 图形绘制 · 使用指南

三维图形计算器使用说明

WebGL 中的曲面、参数曲线和点云

三维图形计算器在交互式 WebGL 视口中渲染曲面 z = f(x, y)、参数空间曲线 (x(t), y(t), z(t)) 与散点点云。切换模式、输入表达式或点,然后用鼠标或触摸环绕场景,从任意角度检视形状。所有计算在浏览器本地完成。

01 选择模式

在 Surface 模式下,输入 z 作为 x 和 y 的函数(例如 sin(sqrt(x^2 + y^2)))并设置 x 和 y 的范围;resolution 控制网格密度。在 Parametric 模式下,在 [tmin, tmax] 上输入 x(t)、y(t) 和 z(t) 作为参数 t 的函数;samples 控制定义曲线的点数。在 Scatter 模式下,通过输入坐标并点击 + 添加单个 (x, y, z) 点;使用 Clear 移除所有点,使用 × 移除一个点。

点击并拖拽可旋转相机,滚动可缩放,右键拖拽(或双指拖拽)可平移。视图通过 WebGL 在浏览器中渲染,并包裹在 ClientOnly 中,因此不影响服务端渲染。

三种模式可以叠加显示。例如同时显示一个曲面和一条穿过它的参数曲线,观察曲线与曲面的交点。这种叠加能力是理解"曲线在曲面上"这类抽象概念的有力工具。

所有表达式求值、网格生成、渲染都在浏览器本地完成。函数表达式与点数据从未离开你的设备,断网后只要页面已加载仍可使用。

  • Surface:z = f(x,y),在矩形网格上采样
  • Parametric:当 t 在 [tmin, tmax] 内变化时描绘的曲线
  • Scatter:离散的 (x, y, z) 点云
  • 更高的 resolution/samples 会得到更平滑的结果,但代价是性能
  • 所有计算在浏览器本地完成,不上传数据

02 从二元函数到空间曲面

一元函数 y = f(x) 的图像是一条平面曲线;二元函数 z = f(x, y) 的图像则是悬浮在 xy 平面上方的一张曲面——每个 (x, y) 对应一个高度 z。把平面曲线"吹"成空间曲面,让我们可以讨论地形、温度场、电势分布这类"两个自变量"的现象。这是从单变量微积分跨入多元微积分的第一道门槛。

计算机画不出真正连续的曲面,只能把定义域划分成 N×N 的网格,在每个格点上算出 z,再把相邻四个格点连成两个三角形。N 越大三角形越多、曲面越光滑,但渲染开销也越大。分辨率 24 适合快速浏览,48-64 适合最终展示。理解这一点,你就明白了为什么"降低分辨率可以提速"。

透视投影模拟人眼"近大远小"的视觉效果。每个 3D 点先经模型矩阵、视图矩阵、投影矩阵三次变换,再映射到屏幕坐标,最后由 GPU 把三角形逐个光栅化成像素。这一整套流程由 WebGL 在显卡上完成,因此可以流畅处理几十万个顶点。

03 参数方程与空间曲线

有些曲线没法写成 y = f(x) 或 z = f(x, y),比如一个圆、一个纽结、一段行星轨道——它们往往自相交或回溯。参数方程的解法是引入第三个变量 t,把 x、y、z 都写成 t 的函数。t 像时间一样从 tmin 流向 tmax,动点 (x(t), y(t), z(t)) 就在空间中"走"出一条轨迹。

圆柱螺旋 (cos t, sin t, t) 是最经典的例子:当 t 从 0 增加到 6π,动点绕 z 轴旋转三圈,同时匀速上升。DNA 双螺旋、弹簧、楼梯扶手都是螺旋的变体。通过调整 x(t)、y(t)、z(t) 的表达式,你可以构造出纽结、利萨茹图形、甚至模拟行星轨道。

样本数(samples)决定曲线的光滑程度。光滑简单的曲线(圆、椭圆)100 个点足够;扭曲复杂的(纽结、高频振荡)建议 500–2000。如果曲线出现"折线感",把样本数加倍再看。注意样本越多渲染越慢。

按键与按钮

模式切换

  • Surface在网格上绘制 z = f(x, y)。
  • Parametric绘制参数曲线 x(t)、y(t)、z(t)。
  • Scatter绘制单个 3D 点。

曲面控件

  • z = f(x, y)用 x 和 y 表示高度的表达式。
  • x / y 范围设置为曲面采样的矩形定义域。
  • resolution网格密度(24–64);越高越平滑但越慢。

参数控件

  • x(t) / y(t) / z(t)在参数 t 上定义曲线的三个表达式。
  • tmin / tmax参数 t 的范围。
  • samples曲线上的点数(100–2000)。

散点控件

  • x / y / z fields新点的坐标。
  • +将输入的点添加到点云。
  • Clear清除所有散点(同时清空批量文本框)。
  • × (on a point)移除该单个点。
  • bulk text box一次粘贴或输入多个点,每行一个点,用逗号或空格分隔 x、y、z。
  • Apply解析批量文本框,并用其中的点替换当前点云。
  • Copy将当前所有点复制为每行 x, y, z 的文本,便于粘贴到别处。

视口

  • drag环绕/旋转 3D 场景。
  • scroll放大和缩小相机。
  • right-drag平移相机。
  • reset view画布上的按钮,在鼠标平移/缩放后恢复默认视角。
温馨提示
  • 试验时降低 resolution,最终渲染时再提高。
  • 参数曲线非常适合螺旋线、轨道和轨迹。
  • 如果曲面看起来锯齿状,提高 resolution 或缩小 x/y 范围。
  • 必须在浏览器中启用 WebGL 才能显示 3D 视图。
  • 曲面 z=f(x,y) 无法直接画球面等隐式曲面,需拆成两半或用参数式。
  • 样本数决定参数曲线光滑度:简单曲线 100 点,复杂曲线 500–2000。
  • 从正上方看曲面得到"等高线视角",从侧面看能辨认驻点与鞍点。
  • 所有计算在本地完成,断网后页面已加载仍可使用。

免费的在线 3D 绘图工具,使用 WebGL 在你的浏览器里实时渲染曲面 z=f(x,y)、参数曲线 (x(t),y(t),z(t)) 与三维点云。可用鼠标旋转、缩放、平移视角,从任意角度观察数学对象。无需插件、无需注册,数据不出本机。

这个工具能做什么

你输入表达式或一组点,它在三维空间里把对应的几何对象画出来。曲面模式画 z=f(x,y) 这样的"地形图";参数曲线模式画螺旋线、圆环结等空间轨迹;散点模式把一组 (x,y,z) 点画成点云。所有对象都可以用鼠标从任何角度查看。

从二维到三维:多一个变量,多一个世界

一元函数 y=f(x) 的图像是一条平面曲线;二元函数 z=f(x,y) 的图像则是悬浮在 xy 平面上方的一张曲面——每个 (x,y) 对应一个高度 z。把平面曲线"吹"成空间曲面,让我们可以讨论地形、温度场、电势分布这类"两个自变量"的现象。这是从单变量微积分跨入多元微积分的第一道门槛。

3D 投影:怎么把立体"压扁"到屏幕上

你的屏幕是二维的,但场景是三维的,所以引擎必须做一次"投影"。最常用的透视投影模拟人眼:近大远小。每个 3D 点先经模型矩阵、视图矩阵、投影矩阵三次变换,再映射到屏幕坐标,最后由 GPU 把三角形逐个光栅化成像素。这一整套流程由 WebGL 在显卡上完成,因此可以流畅处理几十万个顶点。

参数方程:用一根线穿起整个形状

有些曲线没法写成 y=f(x) 或 z=f(x,y),比如一个圆、一个纽结、一段行星轨道——它们往往自相交或回溯。参数方程的解法是引入第三个变量 t,把 x、y、z 都写成 t 的函数。t 像时间一样从 tmin 流向 tmax,动点 (x(t),y(t),z(t)) 就在空间中"走"出一条轨迹。圆柱螺旋 (cos t, sin t, t) 是最经典的例子。

历史背景:从解析几何到计算机图形学

17 世纪笛卡尔与费马创立解析几何,第一次把"曲线"翻译成"方程"。19 世纪蒙日发展画法几何,让工程师能用二维图纸精确描述三维物体。20 世纪下半叶,随着计算机与 GPU 出现,苏泽兰、卡特穆尔、佩林等人开创了计算机图形学,让实时旋转的 3D 图形成为日常。今天你手中的这个工具,站在三百多年数学与工程的积累之上。

表达式语法

曲面:用 x、y 表示 z,例如 sin(sqrt(x^2+y^2)) 是同心涟漪,x^2-y^2 是马鞍面,exp(-(x^2+y^2)/4) 是二维高斯钟。参数曲线:用 t 表示 x、y、z,例如 x=cos(t)、y=sin(t)、z=t 是螺旋。所有 2D 模式可用的函数(sin、cos、exp、log、sqrt、pow 等)与常数 pi 在这里都可用。

如何使用:三步上手

第一步,选 Surface 模式,输入 sin(sqrt(x^2+y^2)),把 x、y 范围都设为 −10 到 10,分辨率 48,你会看到一圈圈的同心波纹。第二步,切到 Parametric,输入 cos(t)、sin(t)、t,t 范围 0 到 6*pi,观察一条螺旋从地面盘旋而上。第三步,切到 Scatter,输入几个 (x,y,z) 点或粘贴一组数据。三种模式可以叠加显示。

现实中的应用

气象学用等值面可视化气压与温度;医学影像用 CT/MRI 重建器官三维模型;机械工程用 CAD 描述零件表面;机器学习里,损失函数 L(w,b) 是一张高维曲面,梯度下降就是在它上面"滚下山"。就连电子游戏里的角色与场景,本质也是数百万个三角形的拼接——和这个工具渲染曲面的方式一模一样。

数值方法:网格采样

计算机无法画出"连续"的曲面,只能把定义域划分成 N×N 的网格,在每个格点上算出 z,再把相邻四个格点连成两个三角形。N 越大三角形越多、曲面越光滑,但渲染开销也越大。分辨率 24 适合快速浏览,48-64 适合最终展示。理解这一点,你就明白了为什么"降低分辨率可以提速"。

获得漂亮图形的小技巧

曲面有剧烈振荡时(例如 sin(x*y) 在大范围),先缩小区间看清结构再放大。参数曲线的样本数应与曲线复杂度匹配——光滑的圆 100 点足够,纽结可能要 1000 以上。点云若过于密集导致卡顿,可以先抽样一部分观察分布。最后,多用鼠标旋转:从正上方看曲面得到"等高线视角",从侧面看能辨认驻点与鞍点。

局限性

本工具是数值可视化,不做符号计算。曲面必须有显式表达式 z=f(x,y),无法直接画隐式曲面(如球面 x²+y²+z²=1 需要拆成两半或用参数式)。极端分辨率下可能超出 GPU 内存;远离原点的大幅值会因浮点精度损失出现抖动。这些是所有实时 3D 渲染器共有的边界,理解它们比避开它们更重要。

常见问题

Q可以画哪些 3D 对象?
A

三类:曲面 z=f(x,y)(例如马鞍面、波纹面)、参数曲线 (x(t),y(t),z(t))(例如螺旋线、纽结)、散点点云 (x,y,z)。三种模式可以叠加,构成更丰富的场景。

Q为什么我画的球只显示了上半部分?
A

因为 z=f(x,y) 这种形式对每个 (x,y) 只能给出一个 z 值,无法表达"上下两个面"。球面 x²+y²+z²=1 是隐式曲面,要么拆成 z=±sqrt(1−x²−y²) 两张曲面,要么改用参数式 (sin u·cos v, sin u·sin v, cos u)。

Q什么是参数方程?为什么要用它?
A

参数方程把 x、y、z 都表示成第三个变量 t 的函数。它的好处是可以描述"自相交"或"回溯"的曲线,比如圆、纽结、行星轨道,而 y=f(x) 无法表达这些。直观理解:t 像时间,曲线是动点的轨迹。

Q曲面为什么会有"三角形"的颗粒感?
A

计算机画不出真正连续的曲面,只能在 N×N 个格点上采样高度,然后把相邻四点连成两个三角形拼成网格。分辨率越高三角形越多、视觉越光滑,但 GPU 负担也越重。理解这一点,就知道"颗粒感"不是错误,而是数值离散化的本质。

Q如何让曲面更光滑?
A

把 resolution 提高到 48 或 64;或者缩小 x/y 范围让同样的采样点更密集。如果曲面有尖锐特征(如锥顶、自相交),可以局部放大并使用更高分辨率。注意:分辨率翻倍,渲染负载大约变为 4 倍。

Q可以旋转视角吗?
A

可以。左键拖拽旋转,滚轮缩放,右键拖拽(或双指拖拽)平移。点 reset view 可以回到默认相机。多角度观察是 3D 可视化的核心价值——很多在正面看不见的驻点、鞍点、对称性,从侧面一眼就能看出。

Q为什么 sin(x*y) 在大范围下看起来很乱?
A

sin(x*y) 的"频率"随 |x·y| 增大而变快,在远离原点时几乎是剧烈振荡。有限网格无法跟上这种变化,就会出现"摩尔纹"或随机噪点——这在数值计算里称为"走样"(aliasing)。把范围缩到 [−3,3] 就能看清结构。

Q参数曲线的样本数该怎么选?
A

光滑简单的曲线(圆、椭圆)100 个点足够;扭曲复杂的(纽结、利萨茹图形)建议 500–2000。一个判断方法:如果曲线出现"折线感",把样本数加倍再看。注意样本越多渲染越慢。

Q需要什么浏览器或插件?
A

任何支持 WebGL 的现代浏览器都可以,包括 Chrome、Edge、Firefox、Safari。无需安装任何插件或扩展,three.js 渲染器已随站点打包。如果你的浏览器禁用了 WebGL,3D 视图将无法显示。

Q数据会被上传吗?
A

不会。所有表达式求值、网格生成、渲染都在你的浏览器中完成,函数与点数据从未离开本机。断网后只要页面已加载,工具仍然可用。