如何找到两个平面之间的相交线?
我知道数学思想,并且做了平面法线向量之间的叉积
但是如何以编程方式从结果向量中获得线
最佳答案
为了完整起见,请添加此答案,因为在撰写本文时,此处的答案均未包含直接解决该问题的有效代码示例。
尽管这里的其他答案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/