Skip to content

方向判定

Orientation test

用二维或高维行列式符号判断点组转向或仿射定向的基本谓词。

形式陈述

二维点 a,b,c 的方向由行列式 orient(a,b,c)=det(ba,ca) 的符号决定:正、负、零分别表示逆时针、顺时针和共线。高维中,对 d+1 个点使用增广坐标行列式判定仿射定向。谓词本身是组合算法的基础,正确实现必须区分数学上的精确符号与浮点近似。

直觉

a 当作原点,向量 ba 旋转到 ca 的方向就是三点转向;行列式给出带符号面积。

例子与边界

(0,0),(1,0),(0,1) 的值为 1,故左转;交换后两点符号反转。凸包算法用它弹出造成错误转向的栈顶点。整数坐标时可用足够宽的整数计算,但乘法仍可能溢出;固定 epsilon 不能在所有尺度下可靠区分零与非零。

推论与应用

方向判定用于线段相交、点在多边形内、凸包、三角剖分和排列类型,是鲁棒计算几何中最重要的精确谓词之一。

参考资料
  • Mark de Berg et al., Computational Geometry: Algorithms and Applications, 3rd ed., Springer, 2008,Chs. 1–7。
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。