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

标签 algorithm vector direction

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

我附上了一张图片来帮助阐明我的意思。有谁知道适合这个的算法吗?

enter image description here

最佳答案

您必须计算点形成的平面并获得其法线。

如果这些点完全共面,只需获取其中三个点,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)

关于algorithm - 垂直于 3D 点集合的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733343/

相关文章:

algorithm - pytorch:对两个不同大小的张量执行运算的有效方法,其中一个张量具有一对多关系

javascript - CSS中方向属性的奇怪行为

java - 导航 Controller 方向

c++ - 在结构内操作 vector 中的项目

string - 在 Vec<i8> 和 &str 之间转换

c++ - 错误 C2228 : left of '.draw' must have class/struct/union

html - 3 列流体 flexbox 和 rtl

algorithm - 寻找产品组合以获得最大利润

c - 稀疏矩阵乘法期间的最后一个元素不打印?

c++ - 密集和稀疏矩阵的高效(时间和空间复杂度)数据结构