หาก QGIS จะคำนวณ centroid กับ GEOS ซึ่งเป็นพอร์ต JTS แล้วขั้นตอนวิธีการนี้เป็นhttp://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html เกี่ยวกับทฤษฎีนี้มีลิงค์ใน javadoc เข้าสู่http://www.faqs.org/faqs/graphics/algorithms-faq/ดูหัวข้อ 2.02: คำนวณ centroid ของรูปหลายเหลี่ยมได้อย่างไร
เซนทรอยด์ (aka ศูนย์กลางของมวลหรือจุดศูนย์ถ่วง) ของรูปหลายเหลี่ยมสามารถคำนวณเป็นผลรวมถ่วงน้ำหนักของ centroids ของพาร์ติชันของรูปหลายเหลี่ยมเป็นรูปสามเหลี่ยม เซนทรอยด์ของรูปสามเหลี่ยมนั้นเป็นค่าเฉลี่ยของจุดยอดทั้งสามนั่นคือมันมีพิกัด (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