一组点和轨道形状的中心

时间:2014-03-24 19:47:00

标签: center computational-geometry point centroid

我有点看起来像这样的点。x-y plot1 x-y plot2 enter image description here

这些点形成的轨迹可以是圆形或椭圆形。显然,上面两幅图中圆形轨迹的中心是不同的。

如何找到这些轨道的中心点(圆形/椭圆形)?我想找到以中心为中心的(x,y)坐标,不一定必须是指出绘制的数据集。也就是说,我不想要一个中间体。

编辑:另外,无论如何我可以找到包围大部分这些点的圆/椭圆方程吗?在椭圆轨道中,我添加了一个包围点的椭圆在轨道上。通过反复试验计算出这些值。该中心也是通过对该阴谋进行计算来计算的。我该如何以编程方式执行此操作?

2 个答案:

答案 0 :(得分:2)

Smallest circle problem,这是smallest ellipse problem上的一篇论文(PDF下载)。两者都有O(N)算法,并且应该能够为您获得中心的圆和区域提供公式。但是,他们专注于封闭所有要点。要解决该问题,您需要删除一些边界点,您应该从算法中获取这些边界点。不幸的是,它取决于什么是一个足够好的解决方案。

快速简单的随机解决方案是:

  1. 将每组点随机分成k组N / k个点。
  2. 为每组
  3. 运行最小的圆/椭圆算法
  4. 对于每个k集,从主点集中选择至少1个但不再有m个边界点。
  5. 返回步骤1,t次。
  6. 在剩余点上返回圆/椭圆算法的结果。
  7. 该算法以O(N)为代价在每次通过时删除k和mk个边界点。为了您的目的,您可能想要删除一些百分比的边界点,1-25%似乎是一个很好的起点。该解决方案假设k与N相比非常小,否则您将删除太多的点。

    如果要重复从最小的椭圆中移除一个或所有边界点,重新计算最小的椭圆,然后再次移除边界点,则较慢但可能更好的算法非常有用。

    您可以通过让父节点成为其子节点的最小封闭椭圆的边界点(作为集合存储的点以便于更快删除)来实现此目的。边界点的最大数量不应超过k(对于椭圆,我认为其为9,而圆形为3)。因此,在O(k log N)处从数据结构中移除一个点,因为它需要重新计算最小的圆,即受影响的每个父亲的O(k)是O(log N)。因此,从数据结构中删除m个点应为O(mk log N)。您可能还需要考虑每个移除点计算椭圆的面积,并删除每个点的成本为O(Nk log N),直到您只剩下三个点。然后,您可以分析区域数据以确定应使用的椭圆。一个简单的结果就是简单地使用椭圆,该椭圆的面积最接近所创建的所有椭圆的平均面积,但可能并不完全是您所寻求的。它也可能太慢,在这种情况下,我建议单次传递更快的算法。

答案 1 :(得分:1)

这看起来像Robust Ellipse Fitting的一个实例。检查此文件:消除异常值 稳健的椭圆和椭球拟合http://arxiv.org/pdf/0910.4610.pdf

惯性椭圆(惯性椭圆体的http://en.wikipedia.org/wiki/Moment_of_inertia#Inertia_ellipsoid的2D版本)提供了第一个粗略且简单的解决方案。它的中心只是质心,轴由2x2惯性矩阵的特征向量/值给出。