从3D平面提取点的有效方法

时间:2015-03-04 02:22:41

标签: math 3d mathematical-optimization plane

我遇到过这种从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;
}

注意:这只是偏移平面的方向分量以找到平面上的一个点,它当然可以返回平面上其他位置的一个点并且仍然是正确答案,抵消了平面方向只是找到这一点的最直接方式。

1 个答案:

答案 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;
}

如果要将其中一个坐标轴与平面相交,则可以稍微缩短代码。但是你需要通过案例区分为此付出代价,我宁愿避免。除非你能保证飞机不会与其中一个坐标轴平行,即。