计算几何学常用公式和技巧
向量
向量的叉积
x1*y2-x2*y1
返回向量A(x1,y1)与B(x2,y2)的叉积。
同时也是以这两个向量为临边围成的平行四边形的有向面积。
当B在A前进方向的左边时值为正,
共线时为0,
右边为负。
由三维叉乘
扩展至
要注意的是三维叉乘得到的向量,二维叉乘得到的是数值
向量的点积
x1*x2+y1*y2
向量的垂线
(x,y)与(y,-x)垂直,垂足为两向量的起点。
旋转向量
设向量(x,y)逆时针旋转r(弧度)后得到(x1,y1),则
x1=x*cos(r)-y*sin(r)
y1=x*sin(r)+y*cos(r)
推导请看
求点的极角(C/C++)
atan2(y,x)
返回该点与原点的连线与正x轴的夹角,从-π到π(弧度)。
可以将其乘上180/π,得到角度。
注意是先y后x。
直线
两点确定直线
若一直线上ax+by+c=0有(x1,y1),(x2,y2)两点,则:
a = y2 - y1;
b = x1 -x2;
c =x2*y1 - x1*y2;
可以自己列两个解来模拟
两直线交点
若两直线方程为:
则交点为:
通过解方程推导。
比较直线斜率
用乘法比较,除法会掉精度
去除共线的点的贡献
枚举两个点,计算其斜率,然后枚举其他点,比较其他点与第一个点的斜率是否相同。
$O(n^3)$
看都看了,顺手点个推荐呗 :)