Làm thế nào chính xác là trung tâm của đa giác được tính toán?


10

Tôi muốn biết chính xác các công cụ Hình học của QGIS -> đa giác trung tâm đang tính toán tọa độ điểm như thế nào. Ví dụ, nó chia phần nội trú của đa giác thành các điểm nhỏ, lấy hai cặp hai điểm (chiều dài và chiều rộng) với khoảng cách tối đa và lấy đường chéo của hai đường thẳng này làm trọng tâm?

Câu trả lời:


13

Nếu QGIS đang tính toán centroid với GEOS là cổng JTS thì thuật toán này là http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/alerskym/CentroidArea.html . Về lý thuyết, có một liên kết trong javadoc thành http://www.faqs.org/faqs/graphics/alerskyms-faq/ , xem phần 2.02: Làm thế nào có thể tính được trọng tâm của một đa giác?.

Trọng tâm (còn gọi là tâm khối lượng, hoặc trọng tâm) của một đa giác có thể được tính là tổng trọng số của các tâm của một phân vùng của đa giác thành các hình tam giác. Trọng tâm của một tam giác chỉ đơn giản là trung bình của ba đỉnh của nó, tức là nó có tọa độ (x1 + x2 + x3) / 3 và (y1 + y2 + y3) / 3. Điều này cho thấy đầu tiên là tam giác đa giác, sau đó tạo thành một tổng số tâm của mỗi tam giác, được tính theo diện tích của mỗi tam giác, toàn bộ tổng được chuẩn hóa bởi tổng diện tích đa giác. Điều này thực sự hoạt động, nhưng có một phương pháp đơn giản hơn: tam giác không cần phải là phân vùng, mà có thể sử dụng các tam giác theo hướng tích cực và tiêu cực (với các vùng dương và âm), như được sử dụng khi tính toán diện tích của đa giác. Điều này dẫn đến một thuật toán rất đơn giản để tính toán trọng tâm, dựa trên tổng số các tâm tam giác có trọng số với diện tích đã ký của chúng. Các tam giác có thể được lấy là các hình được tạo bởi bất kỳ điểm cố định nào, ví dụ: đỉnh v0 của đa giác và hai điểm cuối của các cạnh liên tiếp của đa giác: (v1, v2), (v2, v3), v.v. của một tam giác có các đỉnh a, b, c là một nửa của biểu thức này: (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.

Dường như với tôi rằng phương pháp này là chính xác. Nếu bạn muốn kiểm tra cách sử dụng các giá trị tọa độ và nếu có thể xảy ra lỗi làm tròn, v.v. bạn có thể xem mã nguồn của JTS hoặc GEOS.


1
Chỉ cần một vài liên kết khác: gdal.org/python/osgeo.ogr.Geometry- class.html#Centroid lưu ý rằng GDAL sử dụng phương pháp GEOS được mô tả tại geos.osgeo.org/doxygen/ classgeos_1_1alacticm_1_1Centroid.html . QGIS sử dụng chức năng GDAL trong nền.
AndreJ

2
Phương pháp này chỉ chính xác cho các đa giác rất nhỏ. Đối với những người lớn, bạn gặp phải vấn đề là quả cầu không phẳng.
Peter Taylor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.