表示形式
隐含形式
x2+y2+z2=1
参数形式
x(t)=cos2πty(t)=sin2πt
向量定义
p(t)=p0+tu
向量定义
p(t)=p0+tdt∈[0,1]
几何定义
球和圆
球和圆
∣∣p−c∣∣=r
初等几何公式
D=2r
C=2πr
A=πr2
S=4πr2
V=34πr3
AABB
AABB 的表示形式
向量表示
pmin=[xmin,ymin,zmin]pmax=[xmax,ymax,zmax]
计算 AABB
计算过程
- 首先将 p_min 设置为正无穷大和 p_max 设置为负无穷大;
- 根据各点依次比较;
for (let index = 0; index < length; index++) {
const vertex = vertices[index];
const [x, y, z] = vertex.get();
if (x < minX) minX = x;
if (y < minY) minY = y;
if (z < minZ) minZ = z;
if (x > maxX) maxX = x;
if (x > maxY) maxY = y;
if (z > maxZ) maxZ = z;
}
AABB 和包围球
AABB 的优点
- AABB 易于实现,计算速度高;
- AABB 有三个自由度,包围球只有一个自由度;
变换 AABB
变换原理
- 对 AABB 4 个顶点进行旋转;
- 基于旋转前的 4 个顶点和旋转后的 4 个顶点 (8 个顶点) 计算一个新的 AABB;

快速算法
- 基于 AABB 的结构加快运算;
- 以 x_min 为例;
- 若想下述公式总和最小,要求 3 个乘积都为最小;
- 若 m11 > 0,取 x_min,反之取 x_max;
- 若 m21 > 0,取 y_min,反之取 y_max;
- 若 m31 > 0,取 z_min,反之取 z_max;
- x,y,z 根据上述步骤以此类推;
x=m11x+m21y+m31z
平面方程
向量表示
- p 为平面一点;
- n 为平面法线;
- d 为平面到原点距离;
p⋅n=d
三点定义一个平面
e1=p2−p1e2=p3−p2n^=∣∣e1×e2∣∣e1×e2
超过三个点的最佳拟合平面
nx=∑i=1n(yi−yi+1)(zi+zi+1)
ny=∑i=1n(zi−zi+1)(xi+xi+1)
nz=∑i=1n(xi−xi+1)(yi+yi+1)
d=n1(∑i+1npi)n^
三角形
向量表示
中心坐标
3v1+v2+v3
内心坐标
l1+l2+l3l1v1+l2v2+l3v3
外心坐标
- 垂直平分线交点;
- 太长了记不住,用的时候 google;
多边形
简单多边形
复杂多边形

自相交多边形

凸多边形和凹多边形
- 凸多边形中的任意两点之间的直线完全在多边形内;
- 凸多边形沿边移动,顶点朝一个方向旋转;

凸多边形的判断
三角剖分
