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

Eug*_*ota 5 graphics ellipse bounding-box eigenvector

给定用户绘制的“形状”,我​​想对其进行“标准化”,以便它们都具有相似的大小和方向。我们拥有的是一组点。我可以使用边界框或圆来近似大小,但方向有点棘手。

我认为,正确的方法是计算其边界椭圆长轴。要做到这一点,你需要计算特征向量的的协方差矩阵。这样做可能对我的需要来说太复杂了,因为我正在寻找一些足够好的估计。选择最小、最大和 20 个随机点可能是一个开始。有没有一种简单的方法来近似这个?

编辑:我发现Power 方法可以迭代地逼近特征向量。维基百科文章。到目前为止,我喜欢大卫的回答

Dav*_*d Z 5

您将计算 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
Run Code Online (Sandbox Code Playgroud)

如果您希望所选的点子集能够代表整个点集,您甚至可以通过仅对某些点求和来获得估计值。

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