如何找到两个平面之间的相交线?

我知道数学思想,并且做了平面法线向量之间的叉积

但是如何以编程方式从结果向量中获得线

最佳答案

为了完整起见,请添加此答案,因为在撰写本文时,此处的答案均未包含直接解决该问题的有效代码示例。

尽管这里的其他答案already covered the principles



可以使用3平面相交算法的简化版本来计算找到两个平面之间的线。

bobobobo's答案的第二个“更鲁棒的方法”引用了3平面相交。

虽然这对于2个平面效果很好(其中第三个平面可以使用前两个的叉积计算),但是对于2平面版本,可以进一步减少该问题。


无需使用3x3矩阵行列式,而是可以使用第一平面和第二平面之间的叉积的平方长度(即第三平面的方向)。
无需包括第三平面的距离(计算最终位置)。
无需抵消距离,而是通过交换叉积订单来节省一些CPU周期。


包括此代码示例,因为它可能不是立即显而易见的。

// Intersection of 2-planes: a variation based on the 3-plane version.
// see: Graphics Gems 1 pg 305
//
// Note that the 'normal' components of the planes need not be unit length
bool isect_plane_plane_to_normal_ray(
        const Plane& p1, const Plane& p2,
        // output args
        Vector3f& r_point, Vector3f& r_normal)
{
    // logically the 3rd plane, but we only use the normal component.
    const Vector3f p3_normal = p1.normal.cross(p2.normal);
    const float det = p3_normal.length_squared();

    // If the determinant is 0, that means parallel planes, no intersection.
    // note: you may want to check against an epsilon value here.
    if (det != 0.0) {
        // calculate the final (point, normal)
        r_point = ((p3_normal.cross(p2.normal) * p1.d) +
                   (p1.normal.cross(p3_normal) * p2.d)) / det;
        r_normal = p3_normal;
        return true;
    }
    else {
        return false;
    }
}

关于math - 两个平面之间的相交线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6408670/

10-13 07:46