C ++ Triangle-Plane交叉线

时间:2014-01-03 06:28:32

标签: c++ geometry intersection

这是我的三角形对象和相关对象的简化版本:

class line{
   public:
    double x1;
    double y1;
    double x2;
    double y2;
}
class vertex{
  public:
    double x;
    double y;
    double z;
}; 
class triangle{
    vertex a;
    vertex b;
    vertex c;
  public:
    line *intersection(double z_axis){
        line *l = new line;

        //intersection code here

        return l;
    }
};

我需要做的是交叉函数返回三角形和平行于给定z轴的x和y轴的平面的线。我看过的所有示例代码都假设有一个力正常或返回不能完全返回我需要的。我真的很感激有关如何以最佳方式进行此操作的一些见解。我无法理解平面 - 平面交叉正式的数学解法。

提前致谢,

最高

1 个答案:

答案 0 :(得分:1)

你应该处理不同的情况:

1)没有交集。 (对于每个顶点:z_axis> vertex.z)或(对于每个顶点:z_axis< vertex.z)

2)三角形位于z = z_axis平面(对于每个顶点:z_axis = vertex.x)。这对双打来说很尴尬,但是0或者一些2的幂或者一些漂亮的二进制分数都是精确表示的。

3)一个顶点(我们称之为P)位于下方,两个顶点(Q,R)位于z = z_axis平面之上(反之亦然)

在这里,您将能够找到交叉点。 您的问题将被分解为找到线PQ和PR与平面z = z_axis的交点。

4)一个或两个顶点位于z = z_axis平面上。

这里的交叉点很简单,但它们仍然可以用与第3点相同的方式计算。

清楚吗?你可以开始实施......