垂直于3D点集合的方向?

时间:2014-03-29 15:58:30

标签: algorithm vector direction

我有一组3D点,形成一个不完美的圆圈,并按照它们在圆圈中出现的顺序存储。我通过计算所有点的平均位置将物体定位在环的中心,这很好。现在,我想要的是中心的物体相对于其余的点(即垂直于环)面朝上/朝下。

我已经包含了一张图片,以帮助澄清我的意思。有谁知道一个适合这个的算法?

enter image description here

2 个答案:

答案 0 :(得分:2)

你必须计算你的点形成的平面并使其正常。

如果这些点完全共面,只需获得其中的三个,abc,并计算两个向量。法向量n是它们的叉积:

v1 = b - a;
v2 = c - a;
n = v1 x v2;

如果这些点不是完全共面的,你可以得到最适合点的平面,然后是正常的。您可以通过求解Ax=0形式的线性方程组来获得平面。由于平面的一般方程为Ax + By + Cz + D = 0,因此每个3D点得到一个方程,从而获得该系统:

| x1 y1 z1 1 |   | A |   |  0  |
| x2 y2 z2 1 | x | B | = |  0  |
| x3 y3 z3 1 |   | C |   |  0  |
|    ...     |   | D |   | ... |
| xn yn zn 1 |           |  0  |

法线向量为(A, B, C)

答案 1 :(得分:1)

在前面的答案中,当你求解具有n个点的最佳超平面法向量时,你得到一个包含4个未知数的n个方程组。你需要将一个未知系数(比方说D)设置为一个常数,如1,并将相应的数据列移到右侧,这样你就不会得到平凡的解A = B = C = D = 0 。如果系数非零,则可以安全地将一个系数设置为1,因为如果扩展它,解A,B,C,D仍然是解决方案。所以你得到了3个未知数的n个方程组,其中右边是所有-1的向量而不是零向量,你的数据矩阵就是你的点矩阵,你的未知系数是A,B,C。一般来说,如果你有超过3个点,这样的系统是超定的,所以你需要使用线性回归来解决它。请参阅http://en.wikipedia.org/wiki/Linear_regression以获得使用最小二乘最佳拟合求解3个系数的矩阵公式。