QGIS, sentroidi bir JTS portu olan GEOS ile hesaplıyorsa, algoritma bu http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html'dir . Teori hakkında, javadoc'ta http://www.faqs.org/faqs/graphics/algorithms-faq/ ile bir bağlantı vardır , bakınız bölüm 2.02: Bir çokgenin sentroidi nasıl hesaplanabilir ?.
Bir çokgenin sentroidi (yani kütle merkezi veya ağırlık merkezi), çokgenin üçgenlere bölünmesinin sentroidlerinin ağırlıklı toplamı olarak hesaplanabilir. Bir üçgenin centroidi basitçe üç köşesinin ortalamasıdır, yani (x1 + x2 + x3) / 3 ve (y1 + y2 + y3) / 3 koordinatlarına sahiptir. Bu, önce çokgenin üçgenlenmesini, daha sonra her bir üçgenin alanı ile ağırlıklandırılmış her üçgenin sentroidlerinin bir toplamının oluşturulmasını, toplamın toplam poligon alanı tarafından normalleştirilmesini önerir. Bu gerçekten işe yarıyor, ancak daha basit bir yöntem var: nirengi bir bölüm olmak zorunda değil, çokgen alanını hesaplarken kullanılan pozitif ve negatif yönelimli üçgenleri (pozitif ve negatif alanlarla) kullanabilir. Bu, işaretli alanlarıyla ağırlıklandırılmış toplam üçgen sentroidlerine dayanarak, sentroidi hesaplamak için çok basit bir algoritmaya yol açar. Üçgenler, herhangi bir sabit nokta, örneğin çokgenin tepe noktası v0 ve çokgenin ardışık kenarlarının iki uç noktası olarak alınabilir: (v1, v2), (v2, v3), vb. a, b, c köşeleri olan bir üçgenin bu ifadenin yarısıdır: (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.
Bana öyle geliyor ki yöntem doğru. Koordinat değerlerinin nasıl kullanıldığını ve yuvarlama hataları vb. Olup olmadığını kontrol etmek istiyorsanız, JTS veya GEOS kaynak koduna bakabilirsiniz.