从三维平面中提取点的有效方法



我遇到了从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;
}

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

您的代码看起来不错。你可以把它缩短为:

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

如果将其中一个坐标轴与平面相交,则可以得到稍短的代码。但你需要区分案件来为此付出代价,我宁愿避免这种情况。除非你能保证平面不会平行于其中一个坐标轴,也就是.

最新更新