确定三角形是否朝左

时间:2014-08-11 21:14:25

标签: math 3d geometry rasterizing

如果在(x1,y1),(x2,y2)和(x3,y3)处有一组三个顶点,您如何确定这三个顶点定义的三角形是左侧还是右侧?

目前,我正在使用交叉产品来确定顶点是否是顺时针方向,并且根据这些知识,我可以确定三角形是左侧还是右侧,而我正在对它们的y坐标进行排序

这很好,但是交叉产品需要五次减法和两次乘法。

是否可能有一些更简单,更快捷的方法来确定一个三角形是否朝向我缺失?

2 个答案:

答案 0 :(得分:2)

这取决于浮点运算的成本,以及条件语句的成本(在一半的时间内清除指令管道的额外成本)。

我的直觉是你当前的解决方案可能是一个相当不错的解决方案。

答案 1 :(得分:0)

我这样看:

  1. 找到最小和最大Y坐标的2个点

    • 如果任何两个点具有相同的Y坐标
    • 然后你必须选择一个X坐标更接近另一个Y min / max点
  2. 测试第3点x坐标

    • 如果它小于任何其他点则面向左侧
    • 如果它比任何其他点更大,那么它将面向左侧
  3. triangle facing

    [注]

    • 此实施需要多个if
    • 然后可以通过交叉产品来解决这个问题......
    • 即使操作较少

    如果你的三角形是定义的绕组(总是CW或CCW)

    • 三角形有A,B,C点
    • 计算这样的行的正负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;
    • 对于CCW它是不合理的......