寻找物体的几何中心?


37

给定一组2D或3D点:

如何找到物体的几何中心?

根据下图,如果以最简单的形式(即均匀的质量密度)计算几何中心,则其不同于质量中心。实际上,问题在于计算这些问题。通常,一种方法是分别平均X坐标和Y坐标,即找到给定点的平均位置(此处为2D)。这可以用作表示对象的一组点的质心。如图所示,由于沿底部边缘的额外顶点,对于一个简单的矩形得到的质心是(0.5,0.4) ,而正确的答案是(0.5,0.5)
请注意,给出的示例太简单了。但是,感兴趣的问题是2D中的复杂形状和3D中的对象,对于这些对象,只有顶点坐标可用。
顺便说一句,一种有效的计算方法很受关注。

只需提一下,我已经检查了诸如Wikipedia之类的某些Web链接,但是我目前的问题是希望找到一组2D和3D点来代表这些点。因此质心引起了人们的兴趣。给出的点没有任何拓扑信息。您可以将它们视为点云。此处提供的演示清楚地表明,众所周知的坐标平均值(例如,参见此Stack Overflow Q&A)可能不正确,如示例中所示。

在此处输入图片说明

以下是一些比较的实现:

  • aa =下面接受的答案
  • chull =点的凸包,即金色多边形
  • cent =质心,在Wikipedia中提出,在aa中作为多边形质心讨论
  • centl =折线的质心,如aa中所述

在视觉上,centl与相比,看起来更能代表给定的几何形状cent。另外两个在这里看起来很有希望,但是如果点的分散是不均匀的(通常情况下),它们通常会过于偏见。
并且还要考虑,尽管凸包使问题变得相当简单,但是它可能会产生太长和太短的边缘而在空间中没有任何对称的定位,也就是说,如果您对这两种情况都进行简单的平均(即不加权),则必须意识到:整个点(绿色)或凸包多边形顶点(蓝色)。

在此处输入图片说明

查找给定点的最小面积矩形中可以找到一个应用程序


这样行吗? 寻找多边形的质心?(StackOverflow)
blah238

3
我不确定您的问题是什么。几何中心或(通常是质心)可以不同于重心(质心)。这是众所周知的事实。另外,还有多种计算几何中心的方法。请参阅:en.wikipedia.org/wiki/Triangle_centeren.wikipedia.org/wiki/Encyclopedia_of_Triangle_Centersfaculty.evansville.edu/ck6/encyclopedia/ETC.html
Devdatta Tengshe 2012年

1
重新更新:没有拓扑时,点云就是点云。您的多边形正方形的图形不适用(顺便说一下,您的(0.5,0.4)的“质心”似乎不是由任何标准公式引起的:对称性强烈要求正方形的任何中心点与(0.5 ,0.5),无论其定义如何)。有关在两个或多个维度上找到点云的代表位置或中心位置的一些想法,请参阅stats.stackexchange.com/questions/1927
whuber

1
@Developer,我现在看到您的意思,您在“矩形”(实际上是多边形)底部的第5个点对顶点坐标进行简单的平均计算,得出的重心与多边形的重心不同,正如胡布尔的回答所解释的那样。
blah238

1
啊哈!即使我一直在寻找这样的东西,我也完全错过了第五个顶点。为了帮助将来的读者,我对问题进行了一些编辑以指出这一点。这确实得到问题的心脏,太:插入或删除顶点沿边缘将改变聚{线,坤}是如何表示的,但它不应该改变其固有的几何性质的计算。这就是为什么顶点的重心与多边形或其边界的重心几乎具有任意关系的原因。
whuber

Answers:


44

每个多边形至少有四个不同的“中心”:

  • 顶点的重心。

  • 其边缘的重心。

  • 其重心为多边形。

  • 特定于GIS的“中心”,可用于标记(通常使用未记录的专有方法来计算)。

(在特殊情况下,它们可能会偶然重合,但是对于“通用”多边形,它们是不同的点。)

通常,“重心”是“质心”。三种类型在假定质量的位置上有所不同:它要么全部在顶点上,要么均匀地分布在边上,要么均匀地分布在整个多边形本身上。

存在简单的方法来计算所有三个重心。一种方法基于以下基本事实:两个质量的不相交联合的重心是重心的总质量加权平均值。 由此我们可以轻松获得以下内容:

  1. 两个(相等加权)顶点的重心是其平均值。这是通过分别平均其坐标获得的。在几何上,它是连接两个顶点的线段的中点。

  2. 通过归纳,n个(相等加权)顶点的重心通过分别平均其坐标来获得。

  3. 线段的重心是其中点。(这很明显是对称的。)

  4. 通过找到每个线段的中点,然后使用线段长度作为权重形成其加权平均值,可以得到折线的重心

    例如,考虑由点(0,0),(6,0),(6,12)描绘的“ L”形。有两段:一个长度为6的中点为((0 + 0)/ 2,(0 + 6)/ 2)=(3,0),另一个长度为12的中点为((6 + 6)/ 2,(0 + 12)/ 2)=(6,6)。因此,它们的长度加权平均坐标为(x,y)

    x = (6*3 + 12*6) / (6+12) = 5,  y = (6*0 + 12*6) / (6+12) = 4.
    

    这不同于三个顶点的重心,即((0 + 6 + 6)/ 3,(0 + 0 + 12)/ 3)=(4,4)。

    编辑作为另一示例,考虑的问题,这虽然在形状为正方形,被作为表示该图五边形确定由点的序列(0,0),(1 / 2,0),(1,0), (1,1),(0,1)。五个边的长度分别为1 / 2、1 / 2、1、1、1和中点(1 / 4,0),(3 / 4,0),(1 ,(1/2),(1 / 2,1)和(0,1 / 2),因此它们的加权平均值等于

    [(1/2)*(1/4, 0) + (1/2)*(3/4, 0) + (1)*(1, 1/2) + (1)*(1/2, 1) + (1)*(0, 1/2)] / (1/2+1/2+1+1+1)
    = (2/4, 2/4) = (0.5, 0.5)
    

    就像人们希望的那样,即使仅顶点的重心(如上面的#2计算)为(0.5,0.4)。

  5. 多边形的重心可以通过三角剖分将其分解为三角形来获得。三角形四边形的重心与其顶点的重心重合。这些重心的面积加权平均值是多边形的重心。三角形区域很容易根据其顶点坐标(例如,根据两个边的楔形积)进行计算。对于这样的面积计算,包括如何利用签署(正或负)领域的说明,请参阅我的(旧)中的“区域”一节课程笔记页

    编辑考虑,例如问题所描绘的多边形。我们可以用三角形三角测量它((0,0),(1 / 2,0),(0,1))在左边,((0,1),中间(1 / 2,0),(1,1)),右边([1,1,(1,0),(1 / 2,0))),它们的面积是1/4 ,分别为1 / 2、1 / 4和它们的重心-通过平均其顶点获得-为(1 / 6,1 / 3),(1 / 2、2 / 3)和(5 / 6,1 / 3),这些重心的面积加权平均值等于

    [(1/4)*(1/6,1/3) + (1/2)*(1/2,2/3) + (1/4)*(5/6,1/3)] / (1/4 + 1/2 + 1/4)
    = (12/24, 6/12)
    = (0.5, 0.5)
    

    尽其所能,尽管沿着底边存在第五个顶点。)

显然,这些方法中的每一个都是有效的:只需在多边形的“意大利面”表示上进行一次遍历,并在每个步骤中使用(非常少的)恒定时间即可。请注意,在除第一个(纯顶点)之外的所有情况下,需要的信息不仅是顶点坐标列表:您还需要了解图形的拓扑。例如,在“ L”示例中,我们需要知道(0,0)是连接到(6,0)而不是(6,12)。

这些都是欧几里得的概念。 它们可以通过几种方式扩展到球体(或椭球体)。一个简单的人将特征看作是三个(欧几里得)维的单纯复形,计算适当的重心,然后将其从椭球的中心向外投射回曲面。这不需要新的概念或公式;除了前两个坐标外,您只需要使用第三个(z)坐标即可。(使用楔形产品的长度仍然可以找到面积。)

另一种概括认为欧几里得度量-根据毕达哥拉斯(Pythagoras),平方和的平方根-可以更改为其他Lp度量前提是p> = 1:将p乘幂之和的pth根取下。找到合适的“重心”不再那么简单,因为上面开发的漂亮的加性(重心是图形中较简单部分的重心的加权平均值)通常不再成立。通常,必须获得迭代的近似数值解。它们甚至可能不是唯一的。

可以出于各种目的定义其他中心。三角形具有许多可以将(大致)概括为多边形的中心:外接圆的中心,最大圆的(某些)圆的中心,最小面积边界椭圆的中心等。任何一组都可以包含在各种“船体”中,例如凸包和获得的那些船体的中心。

注意,这些“中心”中的许多不一定位于多边形内部。(不过,多边形的任何合理的中心都将位于其内部)。

各种各样的方法和解决方案表明,应该警惕一个通用术语,例如“几何中心”或仅仅是“中心”:它几乎可以是任何东西。


对社区:这样的“打hu者”这样的好答案只能对一个好问题提出期望,因为我熟悉他的偏爱,因此,如果您觉得这个问题很有趣,那么每个人都可以考虑投票吗;)
开发人员

我觉得它在某种意义上是有用的,希望给其他竞争者一些时间作为回答的动力。到目前为止,我将其标记为一个不可替代的建设性答案。
开发人员

您能否解释为什么仍然使用球体上的楔形积找到区域?球形三角形区域会更合适吗?我发现的最接近的参考(除了这个出色的答案!)是:jennessent.com/downloads/Graphics_Shapes_Online.pdf-使用球形三角形的区域。
杰森·戴维斯

@Jason我很感兴趣:您如何建议使用球形三角形区域来计算球形特征的重心
ub

@whuber球面多边形被分解为球面三角形,并且每个三角形的重心通过平均其顶点的笛卡尔坐标来计算。我建议多边形重心是这些三角形的加权平均值,其中权重是球形三角形区域,而不是您在答案中建议的平面区域(假设我正确理解了楔积)。
杰森·戴维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.