Tìm thuật toán đa giác trùng lặp


8

Tôi có một nhóm đa giác. Mục tiêu của tôi là tìm các đa giác trùng lặp từ các nhóm đa giác này.

Sử dụng NetTopologySuite ( Cổng c # của JTS), có thể so sánh hai hình học và kiểm tra xem chúng có bằng nhau không. Phương pháp brute-force (kiểm tra từng đa giác so với mọi đa giác khác) là ý tưởng duy nhất xuất hiện trong đầu tôi nhưng không thể sử dụng được nếu có số lượng đa giác lớn. Có bất kỳ thuật toán nào sẽ tốt hơn lực lượng vũ phu trong trường hợp này?

Tôi tìm thấy kịch bản này dường như chứa ý tưởng cho những gì tôi đang tìm kiếm (các bình luận chỉ ra cách tiếp cận chia rẽ và chinh phục..nhưng không có nhiều chi tiết trong các bình luận). Nhưng tôi phải thừa nhận rằng tôi không thể lấy bất cứ thứ gì từ nó :) .. Nó đã được thực hiện cho ArcView, điều mà tôi không quen thuộc.

Lưu ý: Tôi không tìm kiếm giải pháp PostGIS / cơ sở dữ liệu như trong câu hỏi này . Tôi đang tìm kiếm thứ gì đó có thể được tích hợp vào AutoCAD, Quantum GIS hoặc các sản phẩm GIS trên máy tính để bàn như vậy thông qua tùy chỉnh (c #, c ++, python, v.v.)


1
Tôi tưởng tượng một sửa đổi bằng cách sử dụng một cái gì đó như toblerity.github.com/rtree sẽ giúp ích rất nhiều. Xây dựng một chỉ mục không gian và kiểm tra các bản sao trong khi xây dựng chỉ mục
Peter Smith

@PeterSmith - Tôi nghĩ đây là một ý tưởng hay! .. tại sao bạn không thêm câu này làm câu trả lời .. Tôi nghĩ NetTopologySuite đã tích hợp sẵn Rtree .. sẽ phải khai thác ..
vinayan

Câu trả lời:


4

Nếu đa giác thực sự giống hệt nhau và nếu bạn có cách dễ dàng để tính diện tích của chúng, chỉ cần tính diện tích của mỗi đa giác, sau đó sắp xếp theo khu vực và chỉ kiểm tra đa giác với khu vực phù hợp. Một biến thể của ý tưởng này là sắp xếp các đa giác theo tọa độ điểm cực bắc của chúng (phá vỡ mối quan hệ bằng cách chọn phần lớn các điểm phía đông). Chỉ kiểm tra đa giác có điểm cực bắc phù hợp. Nếu đa giác đủ khác nhau, chỉ cần sắp xếp theo số điểm.

Tôi có thể tiếp tục, nhưng bạn có ý tưởng.


Tuy nhiên, ý tưởng này có vẻ khá đơn giản và dễ dàng, thậm chí không có bất kỳ phần mềm hay api nào khác.
vadeelsan

1

Nếu các đối tượng hình học mà bạn đang kiểm tra là giống hệt nhau, thì làm thế nào về việc tạo một từ điển của hình học với khóa là hình học và giá trị là định danh đối tượng.

Bạn chuyển qua danh sách một lần, thêm giá trị vào từ điển cho từng đối tượng. Kiểm tra xem khóa có tồn tại trước khi thêm không và bạn sẽ được thông báo nếu bạn có hình dạng trùng lặp. Tại thời điểm đó, đi sâu vào một vòng lặp để khắc phục vấn đề. Điều này sẽ cung cấp cho bạn một đi qua các đối tượng.


Trông rất thú vị..nhưng tôi không chắc nó sẽ hoạt động..Tôi sẽ dùng thử và quay trở lại ..
vinayan

0

Sau khi đọc rất nhiều, tôi đã đi đến kết luận rằng một chỉ số không gian là những gì được yêu cầu. Nhận xét của @Peter Smith khiến tôi nhìn vào Rtree .

Định nghĩa Wiki cho RTree,

Cây R là cấu trúc dữ liệu cây được sử dụng cho các phương thức truy cập không gian, nghĩa là để lập chỉ mục thông tin đa chiều như tọa độ địa lý, hình chữ nhật hoặc đa giác

Vì vậy, tôi đã tạo một chỉ mục trong NetTopologySuite và truy vấn Index bằng cách sử dụng phong bì của từng tính năng. Các so sánh do đó bị giới hạn ở rất ít tính năng.

Làm thế nào nó được thực hiện bằng NTS được mô tả trong câu trả lời này .

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.