C++ 三角平面相交线

标签 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 轴的直线。我看过的所有示例代码要么假设有法线力,要么返回的返回值不完全符合我的需要。对于如何以最佳方式执行此操作,我真的很感激。我无法理解 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/

相关文章:

c++ - Online Compiler - 在等待输入时拦截程序并自动输入

C++:与 OpenCV 互相关

algorithm - 如何检查一个点是否在有方向的椭圆体内?

arrays - 查找数百万个数组的交集

algorithm - 相交两个有序列表

c++ - 使用 SFINAE、约束或概念来限制特化?

c++ - 为什么不能在全特化中引入新的模板参数?

javascript - 在 d3 或 javascript 中的 svg 圆区域内生成随机点

image-processing - 识别二维空间中多边形的角点

java - 如何相交多个集合?