鉴于用户绘制的“形状”,我想“标准化”它,因此它们都具有相似的大小和方向。我们拥有的是一系列要点。我可以使用边界框或圆圈来近似大小,但方向有点棘手。
我认为,正确的方法是计算其majoraxis的bounding ellipse。为此,您需要计算eigenvector的covariance matrix。这样做可能对我的需求来说太复杂了,因为我正在寻找一些足够好的估计。挑选最小,最大和20个随机点可能是一些启动。有没有一种简单的方法来估算这个?
修改: 我发现Power method迭代逼近特征向量。 Wikipedia article。 到目前为止,我很喜欢David's answer。
答案 0 :(得分:3)
这是一个想法......如果你对点进行线性回归并使用得到的线的斜率怎么办?如果不是所有的点,至少是它们的一个样本。
r ^ 2值还会为您提供有关一般形状的信息。越接近0,形状越圆/均匀(圆/方形)。越接近1,形状越拉伸(椭圆/矩形)。
答案 1 :(得分:3)
你将计算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)。
答案 2 :(得分:2)
此问题的最终解决方案是运行PCA
我希望我能找到一个很好的小实现供你参考......