计算几何 学习笔记
推荐阅读这个,模板可在这里找strangeman的提交记录。
向量相关
向量的坐标表示
有点 $A(x_1,y_1)$ 和点 $B(x_2,y_2)$,则 $\overrightarrow{AB}$ 可表示为 $(x_2-x_1,y_2-y_1)$
共线向量
共线向量 $a(x_1,y_1)$ 和 $b(x_2,y_2)$ 满足
$$
x_1y_2=x_2y_1
$$
由此得到判断三点共线的方法:计算 $\overrightarrow{AB}$ 和 $\overrightarrow{BC}$ 进行比较。
向量的点乘
向量 $a(x_1,y_1)$ 和 $b(x_2,y_2)$ 的数量积
$$
a \cdot b=x_1x_2+y_1y_2
$$
由此得到向量垂直的条件:
$$
a\perp b \Leftrightarrow x_1x_2+y_1y_2=0
$$
向量的叉乘
向量 $a(x_1,y_1)$ 和 $b(x_2,y_2)$ 的向量积
$$
a \times b=x_1y_2-y_1x_2
$$
叉乘的意义
若两个向量的叉积不为 $0$,则他们相交;否则他们重合或平行。
两个向量的叉积是他们围成的平行四边形的面积,由此可以快速计算三角形的面积,从而快速计算多边形的面积。注意:逆时针求得的面积是正的,顺时针求得的是负的。
若两个向量的叉积大于 $0$,则第二个向量由第一个逆时针选择得到;反之由顺时针旋转得到。由此可以判定多边形的凹凸性、判定点与多边形的位置关系、判定线段相交等等。
多边形相关
三角函数
$\pi=\arccos(-1)$,这样精度比较高。
开平方、反三角函数最容易炸精度。因此不要使用正弦定理求解角度,尽量使用余弦定理或点乘。还有个好处就是余弦值在 $[0,\pi]$ 是唯一的!
凸包与面积
求凸多边形的面积的基本思想是三角剖分后求每个三角形的面积。由此产生了两种子类型:
1.在动态凸包中处理。则每次增加点、删除点的面积与该点和相邻两点组成的三角形的面积相关;
2.以某一点为基准点处理。则面积与基准点和当前边构成的三角形的面积相关,注意三点共线的情况要特判。