从 3D 平面提取点的有效方法
Efficient method of extracting a point from a 3D 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;
}
注意:这只是简单地偏移平面的方向分量以在平面上找到一个点,它当然可以 return 平面上其他地方的一个点并且仍然是正确答案,偏移平面方向是找到这一点的最直接方法。
你的代码看起来不错。您可以将其缩短为:
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;
}
如果您要将其中一个坐标轴与您的平面相交,您可以获得稍微短一些的代码。但是您需要通过区分大小写来为此付出代价,我宁愿避免这种情况。除非你能保证这个平面不会平行于其中一个坐标轴,也就是。
我遇到过这种从 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;
}
注意:这只是简单地偏移平面的方向分量以在平面上找到一个点,它当然可以 return 平面上其他地方的一个点并且仍然是正确答案,偏移平面方向是找到这一点的最直接方法。
你的代码看起来不错。您可以将其缩短为:
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;
}
如果您要将其中一个坐标轴与您的平面相交,您可以获得稍微短一些的代码。但是您需要通过区分大小写来为此付出代价,我宁愿避免这种情况。除非你能保证这个平面不会平行于其中一个坐标轴,也就是。