Skip to content

新增几何构造 ​

这些对象可以通过脚本创建,在 App 与 Viewer 中显示,并随输入点、参数及动画更新。名称仍需唯一;e、sphere、surface 等常量或命令名不能作为对象名。

工具箱 ​

App 左侧工具箱中的新增工具均按步骤点选画布或「对象」列表中的现有对象,命令面板也会激活同样的工具。已选对象高亮显示;误选类型会被忽略。当前步骤需要点时,点击没有点的位置会新建一个点,吸附规则与基础绘图工具一致:附近有点就复用,点在曲线上或附近则新建绑定在该曲线上的点,否则新建自由点(3D 中吸附到附近对象,或落在落点平面上——默认 z = 0,可在状态栏的 落点 z 修改)。新建的点会立即显示,但只在构造完成时才与构造一起写入脚本;当前步骤需要的不是点时,点击空白不会创建任何对象。Backspace 或「撤回上一步」撤回最后一次点选(包括由它新建的点),Esc 或「取消点选」清空未完成的构造,不修改脚本。创建前校验几何,成功后连同新建的点作为一次可撤销的脚本修改;移动所引用的对象会自动更新结果。

工具按几何类型和用途归组,分组提示显示类别名称,每组记住上次使用的工具。工具栏和命令面板使用同一份工具表,原有快捷键保持可用。

空间类别工具
2D点与中心点、内心、外心、垂心、重心
2D线性对象线段、向量、直线、射线
2D辅助线垂线、平行线、切线、法线、过点圆切线、角平分线
2D圆与圆弧圆、圆弧、三点圆、内切圆
2D圆锥曲线椭圆、抛物线、双曲线
2D曲线Bézier、样条
2D多边形与区域正多边形、扇形、弓形、不等式区域
3D线性对象空间线段、向量、直线
3D空间圆与曲线空间圆、圆弧、椭圆
3D平面图形与截面平面、空间多边形、平面截面
3D多面体长方体、棱柱、棱锥、多面体、棱台
3D柱锥台体圆柱、圆锥、圆台
3D球与球体部分球、球缺、半球、球带、球扇形
3D生成构造拉伸、旋转
3D数学曲面参数曲面、隐式曲面

指针、3D 点工具和 2D 文本框保留独立入口。「空间直线」(快捷键 L)点选两个位置不同的已有点,创建 line3;「平面」点选三个不共线的已有点。需要时先用 Point3 创建或抬高点。所建直线可用作旋转轴,平面可用作截平面;移动输入点时构造自动更新,支持撤回点选及一次撤销。

工具点选顺序
切线/法线曲线、点(取该点在曲线上的投影位置)
过点圆切线圆、圆外点
角平分线点、顶点、点;再选择内角/外角
三点圆、内切圆、三角形中心三个三角形顶点
抛物线焦点、准线(直线、线段或射线)
双曲线第一焦点、第二焦点、曲线上一点
Bézier、样条依次选控制点,Enter 或「完成」结束;Bézier 选满四点也会完成
正多边形中心、顶点;再设置边数
扇形、弓形中心、起始半径点、结束方向点(逆时针)
空间直线/平面两个位置不同的点/三个不共线的点
空间圆、圆弧三个点;圆弧的中间点为经过点
空间椭圆中心、长轴端点、短轴测量点;第三点确定所在平面,到长轴的垂距确定第二半径
空间多边形、多面体依次点选顶点/多边形面,Enter、「完成」或再次点选第一个对象结束
平面截面立体、截平面
圆台底面中心、底面半径点、顶面中心、顶面半径点
棱台底面多边形、顶面中心、顶面半径点(相对底面第一个顶点的中心距离确定比例)
拉伸轮廓、表示位移的向量或线段
旋转体轮廓、旋转轴直线(整周旋转)
球冠、半球、球带、球扇形球体、法向向量/线段/直线/射线/平面;球冠和球扇形再选截平面上的点,球带再选两个截平面上的点,半球不需要截取点
不等式、隐式曲面、参数曲面两个范围角点,再输入数学表达式

多边形与 Bézier 至少选三个点,样条至少两个点,多面体至少四个面。样条完成时可选择是否闭合。定义域由两角点的 x/y 坐标确定,隐式曲面还使用 z;参数曲面的 x/y 分别对应 u/v。

2D ​

对象语法
外接圆、内切圆circumcircle cc A B C、incircle ic A B C
内/外角平分线angle_bisector bis A V B [external]
切线、法线tangent t path at 0.5、normal n path at 0.5
从点引圆切线tangents pair c from P,返回直线列表
抛物线parabola p F directrix l [from -10] [to 10];l 可为直线、线段或射线,线段/射线按其所在直线计算
双曲线hyperbola h F1 F2 through P [from -3] [to 3]
Bézierbezier b P0 P1 P2 [P3]
正多边形regular_polygon hex O V sides 6
插值样条spline s A B C [closed]
扇形、弓形sector s O radius 2 from 0 to 90deg、circular_segment cap O radius 2 from 0 to 90deg
不等式区域inequality r (x^2+y^2 <= 4) domain -3 3 -3 3

incenter(A,B,C)、circumcenter(A,B,C)、orthocenter(A,B,C)、centroid(A,B,C) 返回三角形的内心、外心、垂心、重心。

新曲线支持 point(t)、project(P)、param(P)、tangent(t)、.length、点绑定、求交与动画。Bézier 的参数范围是 [0,1];样条用控制点区间索引加比例。双曲线显示两个分支,合并参数 [0,1) 对应左支、[1,2] 对应右支,在 1 处跳转;h.left、h.right 分别使用原始双曲参数,适合单支连续动画。

扇形、弓形是不带点绑定的区域对象,提供精确 .area、.contains(P) 与 .arc 路径。不等式区域被裁剪到 domain,面积和边界为采样近似。多个约束用 intersection 合并。

3D ​

txt
space solid
point3 O 0 0 0
point3 A 3 0 0
point3 B 0 2 0
circle3 orbit O normal (0,0,1) radius 2
arc3 arc O normal (0,0,1) radius 2 from 0 to 90deg
ellipse3 ellipse O normal (0,0,1) radii 3 2
ellipse3 oriented O normal (cross3(vec3(O,A),vec3(O,B))) axis (vec3(O,A)) radii 3 2
polygon3 base (0,0,0) (4,0,0) (4,4,0) (0,4,0)
extrude body base by (0,0,3)
plane slicing (0,0,1) normal (0,0,1)
section cut body by slicing
point3 P on orbit at 0
animate P duration 4s

ellipse3 可用 axis <向量> 代替 angle 指定第一轴方向,向量在所在平面上的投影必须非零;两种子句不能同时使用。

circle3 c A B C、arc3 a A B C 也支持三点定义。圆弧经过中间点。polygon3 支持凹多边形;polygon3 ring outer holes inner 支持带孔面。所有顶点必须共面,边界不能自交或互相接触。

对象语法与结果
自定义多面体polyhedron s face1 face2 face3 face4 ...,面为 polygon3,每条边属于两个面
截面section cut s by pl,多面体返回带面积、边界的 polygon3,球返回 circle3
圆台frustum f baseCenter topCenter radii 2 1
棱台pyramid_frustum f baseFace top topCenter scale 0.5
挤出体extrude s profile by (0,0,3) [samples 96],支持带孔面、圆和椭圆
旋转面/体revolve s profile around axis [from 0] [to 2pi] [samples 64]
参数曲面parametric_surface s (u,v,u*v) domain -2 2 -2 2 [samples 48]
隐式曲面equation3 s (x^2+y^2+z^2-4) domain -3 3 -3 3 -3 3 [samples 32]

旋转曲线生成曲面,旋转简单多边形生成封闭实体;旋转轴必须在生成面的平面内,生成面须位于轴的一侧,暂不接受带孔生成面。部分旋转会封闭两端。equation3 绘制表达式等于零的曲面,因此一般方程写成左边减右边。

curve3、locus3、空间圆/圆弧/椭圆和多边形边界现在都支持:

txt
point3 P on helix at 0.5
let Q = helix.project(A)
let t = helix.param(A)
let direction = helix.tangent(0.5)
animate P duration 4s mode pingpong

curve3 使用精确表达式求点,locus3 在连续采样段内插值;未定义间隙保持无效,不会连线穿越。字面量 at 支持拖动、动画和保留角度单位的源码写回。球面仍用两个 atAngles 参数。参数曲面提供 s.point(u,v)、s.normal(u,v),暂不作为绑定点的曲面载体。

多面体截面、面面积和多边形挤出测量使用实际几何;球截圆、圆台测量使用解析公式。圆柱/圆锥截面的曲线边界、圆/椭圆挤出、旋转体及曲面面积使用网格近似。没有面积的截切返回空列表与警告。

参数曲面采样限制为每轴 8–160,隐式曲面为 8–64;旋转体限制为 30,000 个生成顶点,隐式网格限制为 250,000 个顶点。Viewer 的求值预算比编辑器更小,高采样脚本可能超出预算。

球的部分实体 ​

txt
sphere_cap cap ball normal (0,0,1) height 1 samples 32
hemisphere half ball normal (0,0,1) samples 32
sphere_zone band ball normal (0,0,1) from -1 to 1 samples 32
sphere_sector radial ball normal (0,0,1) height 1 samples 32

ball 是已有球,normal 指向正轴。球冠高度满足 0 < height <= 2r;半球使用高度 r。球带是两个轴向位置之间的球体切片,满足 -r <= from < to <= r。球扇形将球冠的球面部分沿半径连接到球心。显示网格复用旋转生成,体积、总表面积、重心、高度和球面部分面积 .curvedArea 使用精确公式。总表面积包含封闭所需的底面或锥面。采样默认 32,限制为 8–96。