如果在(x1,y1),(x2,y2)和(x3,y3)处有一组三个顶点,您如何确定这三个顶点定义的三角形是左侧还是右侧?
目前,我正在使用交叉产品来确定顶点是否是顺时针方向,并且根据这些知识,我可以确定三角形是左侧还是右侧,而我正在对它们的y坐标进行排序
这很好,但是交叉产品需要五次减法和两次乘法。
是否可能有一些更简单,更快捷的方法来确定一个三角形是否朝向我缺失?
答案 0 :(得分:2)
这取决于浮点运算的成本,以及条件语句的成本(在一半的时间内清除指令管道的额外成本)。
我的直觉是你当前的解决方案可能是一个相当不错的解决方案。
答案 1 :(得分:0)
我这样看:
找到最小和最大Y坐标的2个点
测试第3点x坐标
[注]
if
州如果你的三角形是定义的绕组(总是CW或CCW)
计算这样的行的正负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;