C# 离非共面点最近的平面?

C# 离非共面点最近的平面?,c#,algorithm,linear-algebra,C#,Algorithm,Linear Algebra,我有很多非共面的3D点,我想计算离它们最近的平面(它们总是会形成一个粗糙的平面,但变化程度很小)。这可以通过求解联立线性方程组来实现,每个点一个,其形式如下: “Ax+By+Cz+D=0” 我现在面临的问题有两方面 首先,由于这些点是三维浮动点,由于舍入误差,它们不能被依赖于精确性 其次,到目前为止,我发现的所有以编程方式解决线性方程组的方法都涉及使用NXN矩阵,这严重限制了我的能力,因为我有4个未知数和任意数量的线性方程组(由于3D点数量的变化) 有没有人有一个像样的方法来解决没有这些约束的联

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

“Ax+By+Cz+D=0”

我现在面临的问题有两方面

首先,由于这些点是三维浮动点,由于舍入误差,它们不能被依赖于精确性

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

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


谢谢!:)

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


如果您不关心算法的数学精度,只想得到一个粗略的结果,那么您可能需要随机选取3个点来构造一个平面向量,然后在遍历其余点时进行增量调整。只是一些想法…

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


如果您不关心算法的数学精度,只想得到一个粗略的结果,那么您可能需要随机选取3个点来构造一个平面向量,然后在遍历其余点时进行增量调整。只是一些想法…

如果你的点都靠近平面,你可以选择普通最小二乘法(将Z视为两个自变量X和Y的函数,并最小化到平面的垂直距离平方和)或总最小二乘法(所有变量独立,最小化法向距离之和)。后者需要3x3 SVD。(遗憾的是,这不是最简单的演示。)


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

如果点都靠近平面,则可以选择普通最小二乘法(将Z视为两个独立变量X和Y的函数,并最小化到平面的垂直距离平方和)或总最小二乘法(所有变量独立,最小化正常距离之和)。后者需要3x3 SVD。(不幸的是,这不是最简单的演示。)

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