代码之家  ›  专栏  ›  技术社区  ›  Eugene Yokota

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

  •  4
  • Eugene Yokota  · 技术社区  · 17 年前

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

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

    编辑 : 我发现 Power method 迭代地逼近特征向量。 Wikipedia article . David's answer .

    3 回复  |  直到 9 年前
        1
  •  4
  •   Eugene Yokota    17 年前

    你要计算一个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
  •  3
  •   colithium    17 年前

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

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

        3
  •  2
  •   shoosh    17 年前

    这个问题的最终解决方案是运行 PCA
    我希望我能找到一个很好的小实现供您参考。。。

    推荐文章