多边形的质心如何精确计算?


10

我想知道QGIS几何工具->多边形质心到底是如何计算点坐标的。例如,是否将多边形的边界划分为小点,以两对两点(长度和宽度)为最大距离,并将这两条线的交点作为质心?

Answers:


13

如果QGIS使用作为JTS端口的GEOS计算质心,则算法为http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html。关于该理论,javadoc中有一个链接到http://www.faqs.org/faqs/graphics/algorithms-faq/,请参见第2.02节:如何计算多边形的质心?

可以将多边形的质心(也称为质心或重心)计算为多边形的一部分划分为三角形的质心的加权总和。三角形的质心只是其三个顶点的平均值,即,它的坐标为(x1 + x2 + x3)/ 3和(y1 + y2 + y3)/ 3。这建议首先对多边形进行三角剖分,然后形成每个三角形的质心的总和,并按每个三角形的面积加权,然后将总和归一化为总多边形面积。确实可以,但是有一种更简单的方法:三角剖分不一定是一个分区,而是可以使用正负三角形的三角形(具有正负面积),就像在计算多边形的面积时所使用的那样。这导致了一个非常简单的算法,可以根据三角质心的总和及其符号区域加权来计算质心。三角形可以视为由任意固定点(例如,多边形的顶点v0)和多边形的连续边的两个端点((v1,v2),(v2,v3)等)形成的三角形。顶点为a,b,c的三角形的整数是此表达式的一半:(b [X]-a [X])*(c [Y]-a [Y])-(c [X]-a [X] )*(b [Y]-a [Y]);

Code available at ftp://cs.smith.edu/pub/code/centroid.c (3K).
Reference: [Gems IV] pp.3-6; also includes code.

在我看来,该方法是准确的。如果要检查如何使用坐标值以及是否存在舍入误差等,可以查看JTS或GEOS的源代码。


1
仅有的几个链接:gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid指出GDAL使用的是geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html中描述的GEOS方法。QGIS在后台使用GDAL功能。
AndreJ

2
该方法仅适用于非常小的多边形。对于大的地球仪,您会遇到地球不平坦的问题。
彼得·泰勒
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.