我有一组3D点,形成一个不完美的圆圈,并按照它们在圆圈中出现的顺序存储。我通过计算所有点的平均位置将物体定位在环的中心,这很好。现在,我想要的是中心的物体相对于其余的点(即垂直于环)面朝上/朝下。
我已经包含了一张图片,以帮助澄清我的意思。有谁知道一个适合这个的算法?
答案 0 :(得分:2)
你必须计算你的点形成的平面并使其正常。
如果这些点完全共面,只需获得其中的三个,a
,b
和c
,并计算两个向量。法向量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个系数的矩阵公式。