我遇到过这种从3D平面提取位置的方法。
我已经对此进行了测试并且工作正常,但对于这样一个原始操作,我想知道是否有一种更有效的方法在常规实践中。
void position_from_plane(float r_co[3], const float p[4])
{
const float p_len_sq = p[0]*p[0] + p[1]*p[1] + p[2]*p[2];
const float d = (-p[3] / p_len_sq) - 1.0f;
r_co[0] = p[0] + p[0]*d;
r_co[1] = p[1] + p[1]*d;
r_co[2] = p[2] + p[2]*d;
}
注意:这只是偏移平面的方向分量以找到平面上的一个点,它当然可以返回平面上其他位置的一个点并且仍然是正确答案,抵消了平面方向只是找到这一点的最直接方式。
答案 0 :(得分:1)
您的代码看起来不错。你可以稍微缩短它:
void position_from_plane(float r_co[3], const float p[4])
{
const float d = -p[3] / (p[0]*p[0] + p[1]*p[1] + p[2]*p[2]);
r_co[0] = p[0]*d;
r_co[1] = p[1]*d;
r_co[2] = p[2]*d;
}
如果要将其中一个坐标轴与平面相交,则可以稍微缩短代码。但是你需要通过案例区分为此付出代价,我宁愿避免。除非你能保证飞机不会与其中一个坐标轴平行,即。