如果在 (x1, y1)、(x2, y2) 和 (x3, y3) 处有一组三个顶点,如何确定由这三个顶点定义的三角形是朝左还是朝右?
目前,我正在使用叉积来确定顶点是否是顺时针方向,并且有了这些知识,我可以在对它们的 y 坐标进行排序时确定三角形是朝左还是朝右。
这很好用,但叉积需要五次减法和两次乘法。
是否有一些更简单、更快的方法来确定我缺少的三角形是否朝左?
如果在 (x1, y1)、(x2, y2) 和 (x3, y3) 处有一组三个顶点,如何确定由这三个顶点定义的三角形是朝左还是朝右?
目前,我正在使用叉积来确定顶点是否是顺时针方向,并且有了这些知识,我可以在对它们的 y 坐标进行排序时确定三角形是朝左还是朝右。
这很好用,但叉积需要五次减法和两次乘法。
是否有一些更简单、更快的方法来确定我缺少的三角形是否朝左?
这将取决于浮点运算的成本visavi 条件语句的成本(加上一半时间清除指令管道的额外成本)。
我的直觉是,您当前的解决方案可能是一个相当不错的解决方案。
我是这样看的:
找到具有最小和最大 Y 坐标的 2 个点
测试第 3 个点 x 坐标
[笔记]
if
状态如果你的三角形有定义的绕组(总是顺时针或逆时针)
像这样计算行的正负 dy 的计数:
int p=0,n=0;
if (B.y-A.y>=0) p++; else n++;
if (C.y-B.y>=0) p++; else n++;
if (A.y-C.y>=0) p++; else n++;
现在为CW
if (p<n) left_facing; else right_facing;