给定用户绘制的“形状”,我想对其进行“标准化”,以便它们都具有相似的大小和方向。我们拥有的是一组点。我可以使用边界框或圆形来近似大小,但方向有点棘手。
我认为正确的方法是计算其边界椭圆的长轴。为此,您需要计算协方差矩阵的特征向量。这样做可能对我的需要来说太复杂了,因为我正在寻找一些足够好的估计。选择最小、最大和 20 个随机点可能是一些开始。有没有一种简单的方法来近似这个?
您将计算 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)。
这里有一个想法......如果你对点执行线性回归并使用结果线的斜率怎么办?如果不是所有的点,至少是其中的一个样本。
r^2 值还会为您提供有关一般形状的信息。越接近 0,形状越圆形/均匀(圆形/方形)。越接近 1,形状越拉长(椭圆/矩形)。
这个问题的最终解决方案是运行PCA
我希望我能找到一个不错的小实现供您参考...