Graphics 给定一组点,如何近似其形状的长轴?

Graphics 给定一组点,如何近似其形状的长轴?,graphics,bounding-box,ellipse,eigenvector,Graphics,Bounding Box,Ellipse,Eigenvector,给定一个由用户绘制的“形状”,我想“规范化”它,以便它们都具有相似的大小和方向。我们拥有的是一组点。我可以使用边界框或圆来近似大小,但方向有点复杂 我认为,正确的方法是计算它的。要做到这一点,您需要计算。这样做可能会太复杂,我的需要,因为我正在寻找一些足够好的估计。选择最小值、最大值和20个随机点可能是一些开端。有没有一个简单的方法来近似这个 编辑: 我发现迭代逼近特征向量。 到目前为止我很喜欢。这里有一个想法。。。如果对点执行线性回归并使用结果线的斜率,会怎么样?如果不是所有的点,至少有一个样

给定一个由用户绘制的“形状”,我想“规范化”它,以便它们都具有相似的大小和方向。我们拥有的是一组点。我可以使用边界框或圆来近似大小,但方向有点复杂

我认为,正确的方法是计算它的。要做到这一点,您需要计算。这样做可能会太复杂,我的需要,因为我正在寻找一些足够好的估计。选择最小值、最大值和20个随机点可能是一些开端。有没有一个简单的方法来近似这个

编辑: 我发现迭代逼近特征向量。
到目前为止我很喜欢。

这里有一个想法。。。如果对点执行线性回归并使用结果线的斜率,会怎么样?如果不是所有的点,至少有一个样本


r^2值还将提供有关常规形状的信息。越接近0,形状越圆/均匀(圆形/方形)。越接近1,形状就越伸展(椭圆形/矩形)。

您将计算2x2矩阵的特征向量,这可以通过几个简单的公式来完成,因此它没有那么复杂。在伪代码中:

// sums are over all points
b = -(sum(x * x) - sum(y * y)) / (2 * sum(x * y))
evec1_x = b + sqrt(b ** 2 + 1)
evec1_y = 1
evec2_x = b - sqrt(b ** 2 + 1)
evec2_y = 1
如果您希望所选的点子集能够代表整个集合,那么您甚至可以通过对部分点求和来获得估计值


编辑:我认为x和y必须转换为零均值,即首先从所有x,y中减去均值(eed3si9n)。

这个问题的最终解决方案是运行

我希望我能找到一个很好的小实现供您参考…

我要说的是PCA。这是最终的正确答案。如果这计算出协方差矩阵的特征向量,那就太棒了。是否有指向此方法的链接?请查看(sep02.zip)上的示例代码,我发现2x2矩阵的特征向量有一个快速欺骗:。对于C=|E(xx)E(xy)| E(xy)E(yy)|,L1-d/C的结果是(sum(xx)-sum(yy))/(2*sum(xy))+sqrt(((sum(xx)-sum(yy))/(2*sum(xy))^2+1,这正是b+sqrt(b^2+1)。正如我在答案中添加的那样,我认为x和y需要调整为零的平均值。你是对的,它们确实。。。我想我在写公式的时候是在暗中假设的。