计算几何中的ToLeft测试
判断点是否在三角形内
求解计算几何中的凸包问题时,使用的比较简单,但是复杂度比较高的算法中有一种算法叫做极点法,基本思想是从所有的点中去除所有的不是凸包边上的点.
从所有的剩余的点中,选出三个点,然后再在剩余的点集中,判断是否在三角形的内部,如果在内部,则去除这个点,说明它不是凸包的结果;否则,就暂时保留这个点,说明它可能是凸包边上的点.如下图所示:点a在三角形的内部,肯定不是凸包上的点,点b暂时可能是凸包上的点.
ToLeft测试
不难从上面的图中看出,若把三角形的三个边都设定为逆时针方向,那么点a在三个向量边的左侧.b在其中两条边的左侧,但是在p和q那条边的右侧.
由此可以判断,当一个点在三角形三条逆时针边的左侧时,点必定在三角形的内部,不是凸包边上的解,否则不是在三角形内部.这就是所谓的ToLeft测试.
三角形的有向面积
实现ToLeft测试方法也有很多,最经典的是使用求解矩阵行列式求解有向面积的方式.
设两个点p和q,测试点s是在pq连线的左侧还是右侧,如下图所示.
让p, q,s构成一个三角形,然后各个边,边的方向与pq的方向一致,这个三角形的有向面积计算如下:
2∗S=∣∣∣∣∣p[x]q[x