Thuật toán tìm các điểm đa giác kèm theo


8

Tôi đang cố gắng tìm một thuật toán có thể xác định các đa giác nhỏ nhất có thể để bao gồm một số điểm.

Tôi biết làm thế nào để có được vỏ lồi xung quanh tất cả các điểm, nhưng nói rằng các điểm nằm trên các đảo khác nhau, có thể xác định rằng có một khoảng cách giữa các nhóm khác nhau và có được các đa giác riêng biệt cho mỗi nhóm không?


Câu trả lời là chỉ cần một đa giác; diện tích của nó có thể tùy ý gần bằng 0; và nó không bao giờ là duy nhất. (Một cách để tìm giải pháp: tồn tại các điểm trên mặt phẳng mà từ đó mọi điểm trong tập hợp ban đầu đều có thể nhìn thấy. Theo dõi một tuyến đường không tự giao nhau từ điểm này đến từng điểm đã cho, lần lượt tạo thành một ngôi sao với các tia cực kỳ hẹp.) Điều này cho thấy vấn đề được nêu không đầy đủ: nó cần một tuyên bố rõ ràng hơn, kỹ lưỡng hơn về mục tiêu phân tích.
whuber

Câu trả lời:


9

Nghe có vẻ như bạn cần một thuật toán phân cụm (ví dụ: K-nghĩa là phân cụm) trước, sau đó là một thân tàu (thân lồi, nhưng một thân tàu lõm có thể có diện tích nhỏ hơn nhưng khó thực hiện hơn).



3

Công cụ "Clustr" mà chúng tôi sử dụng (d) tại Flickr để tạo các shapefile có nguồn gốc từ ảnh được gắn thẻ địa lý có thể được sử dụng:

https://github.com/straup/Clustr

(Stackexchange đang ngăn tôi thêm hơn 2 liên kết trong bài đăng này. Nếu bạn tìm kiếm "hình dạng của alpha", bạn có thể tìm thấy bài đăng trên blog code.flickr mà chúng tôi đã làm khi chúng tôi công bố các shapefiles.)

Nó được thiết kế để thử và tạo đường viền từ một túi điểm thay đổi liên tục (còn gọi là ảnh). Các bit math-y thực tế có ở đây:

http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Alpha_shapes_3/Ch CHƯƠNG_main.html

Clustr có một số lỗi đã biết nhưng chủ yếu hoạt động, hầu hết thời gian ...


2

từ góc độ cơ sở dữ liệu, có vẻ như bạn muốn nhóm các điểm trên ilands và tạo một điểm lồi trên mỗi nhóm.

trong postgis nó sẽ trông giống như:

SELECT ST_Convexhull(ST_Collect(p.the_geom))
FROM pointtable p INNER JOIN islands i ON ST_Intersects(p.the_geom,i.the_geom)
GROUP BY i.id;

/ Nicklas


Tôi không nghĩ rằng tôi đã rõ ràng trong câu hỏi ban đầu của tôi. Vấn đề là tôi không biết các điểm ở đâu, nhưng sẽ ở vị trí khác biệt, vì vậy tôi cần một thuật toán để tự động tạo các cụm trong đó các điểm nằm ở đó, không di chuyển chúng đến các khu vực được xác định. Tôi đã sửa đổi thuật toán phân cụm k-mean để tìm kiếm tập dữ liệu cho các cụm trung tâm và sau đó phân cụm.
jjrdk

Bạn có nghĩa là bạn không biết Quần đảo ở đâu?. Bạn không có một đại diện vector của các đảo, ok. Nhưng ý bạn là gì khi "không di chuyển chúng". Tôi không đề nghị di chuyển bất cứ thứ gì? ..
Nicklas Avén

Tôi không biết các nhóm (đảo) sẽ nằm ở đâu, nó sẽ phụ thuộc vào vị trí của các điểm. Vì vậy, tôi đang cố gắng tìm các đa giác nhỏ nhất bao quanh các vị trí điểm. Bằng cách di chuyển, tôi có nghĩa là phân cụm các điểm trong một số cụm xác định như trong phân cụm k-nghĩa.
jjrdk

1

arcpy.AggregatePoints_cartography (pntGeometryList, outAppendFeatureClass, buffer_radius)

Trong đó pntGeometryList là danh sách các điểm của bạn, outAppendFeatureClass the featureclass tập hợp sẽ tạo và buffer_radius sẽ xác định các liên kết giữa mỗi điểm 'đối diện bên ngoài'.


Xin lỗi, chỉ có phần còn lại của câu hỏi của bạn, mà tôi đã không đọc.
Lông

Làm thế nào để bạn đối chiếu điểm của bạn?
Lông

1

Lúc đầu, tôi nghĩ đề xuất của Dan về ý nghĩa của k có nghĩa là có ý nghĩa, nhưng sau khi xem kết quả của tập dữ liệu chuột trên trang wikipedia cho phương tiện k , có vẻ như phân cụm Tối đa hóa gần giống với những gì bạn muốn.

nhập mô tả hình ảnh ở đây


1
Cảm ơn câu trả lời của bạn, tôi thực sự đã đi trước và tạo ra một phiên bản sửa đổi của thuật toán k-mean phân cụm theo khoảng cách tối đa. Tôi đã viết về nó ở đây - reimers.dk/bloss/jacob_Vimftimeweblog/archive/2011/03/08/ trên
jjrdk

Trông thật tuyệt. Tôi nghĩ EM chắc chắn sẽ khó thực hiện hơn. Sẽ rất thú vị để xem liệu mã của bạn có hoạt động trong bạc không, có thể sử dụng TPL này .
Kirk Kuykendall
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.