这是我的三角形对象和相关对象的简化版本:
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 轴的直线。我看过的所有示例代码要么假设有法线力,要么返回的返回值不完全符合我的需要。对于如何以最佳方式执行此操作,我真的很感激。我无法理解 Plane-Plane 相交的正式数学解决方案。
提前致谢
最大
最佳答案
你应该处理不同的情况:
1) 没有交集。 (对于每个顶点:z_axis > vertex.z)或(对于每个顶点:z_axis < vertex.z)
2) 三角形位于 z=z_axis 平面内(对于每个顶点:z_axis = vertex.x)。这对于 double 来说很尴尬,但是 0 或两个的某些幂或一些漂亮的二进制分数被精确表示。
3) 一个顶点(我们称之为 P)在下方,两个顶点(Q,R)在 z=z_axis 平面上方(反之亦然)
在这里您可以找到交叉路口。 您的问题将被分解以找到线 PQ 和 PR 与平面 z=z_axis 的交点。
4) 一个或两个顶点位于 z=z_axis 平面上。
这里的交集是微不足道的,但它们仍然可以按照第 3 点中的相同方式计算。
清楚了吗?您可以开始实现...
关于C++ 三角平面相交线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897908/