离非共面点最近的平面

本文关键字:最近 平面 | 更新日期: 2023-09-27 17:55:13

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

"Ax + By + Cz + D = 0"

我目前遇到的问题是双重的。

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

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

没有人有像样的方法来求解没有这些约束的联立线性方程组,或者,或者,更好的方法来计算离非共面点最近的平面?(平面计算的精度不是太重要)

谢谢! :)

离非共面点最近的平面

如果点都靠近平面,则可以在普通最小二乘法(其中 Z 视为两个自变量 X 和 Y 的函数,并且最小化到平面的垂直距离平方和)或总最小二乘法(所有变量都独立,最小化法线距离之和)之间进行选择。后者需要 3x3 SVD。(请参阅 http://en.wikipedia.org/wiki/Total_least_squares,不幸的是,这不是最简单的演示文稿。

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

有线性

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

如果你不关心算法的数学准确性,只想得到一个粗略的结果,那么也许你会随机 3 个点来构造一个平面向量,然后在你遍历其余点时逐渐调整它。只是一些想法...