离非共面点最近的飞机?

时间:2014-03-30 11:56:44

标签: c# algorithm equation linear

我有许多非共面3D点,我想计算它们最近的平面(它们总是形成一个粗糙的平面,但有一些小的变化水平)。这可以通过求解形式的每个点一个的联立线性方程来完成:

“Ax + By + Cz + D = 0”

我现在遇到的问题是双重问题。

首先,因为点是3D浮点数,所以由于舍入误差,它们不能被精确地依赖。

其次,迄今为止我发现的所有以编程方式求解线性方程的方法都涉及使用NXN矩阵,这严重限制了我能够做的事情,因为我有4个未知数和任意数量的线性方程(由于变化在3D点的数量)。

有没有人有一个不错的方法来解决没有这些约束的联立线性方程,或者更好的方法来计算最近的平面到非共面点? (平面计算的精度不是太大的问题)

谢谢! :)

2 个答案:

答案 0 :(得分:2)

有线性回归的数值方法,它计算最近的线y = mx + c到一组点。您的解决方案将类似,只有一个维度,因此是一个平面回归"。

如果你不关心算法的数学精确度而只是想得到一个粗略的结果,那么也许你可以随机选择3个点来构造一个平面向量,然后在你经历时逐步调整它其余的要点。只是一些想法...

答案 1 :(得分:2)

如果您的点都接近平面,您可以选择普通最小二乘(您可以看到Z是两个独立变量X和Y的函数,并且最小化到平面的垂直距离的平方和),或总最小二乘(所有变量独立,最小化正常距离之和)。后者需要3x3 SVD。 (请参阅http://en.wikipedia.org/wiki/Total_least_squares,遗憾的不是最简单的演示文稿。)

如果某些点是异常值,则需要采用强大的拟合方法。其中一个是RANSAC:选择三个点是随机的,建立他们的平面并计算所有点到平面的距离之和,作为适应度的度量。在N个图纸之后保持最佳结果。