2010-11-19 36 views
6

Tôi đang cố gắng để tạo ra một phương pháp mà sẽ mất trong hai danh sách tùy ý của các nút, cho một chủ ngữ và một đa giác cắt, và đầu ra một trong hai:Làm thế nào để tìm ra khu vực chồng lấn giữa hai đa giác tùy ý

a) diện tích chồng lên nhau
b) một danh sách các nút cho kết quả (cắt) đa giác vì vậy mà tôi có thể tính toán khu vực

tôi đã tìm thấy rất nhiều ví dụ mà kẹp một đa giác tùy ý sử dụng một hình chữ nhật cửa sổ (mà là khá chuẩn trong đồ họa) nhưng đó không phải là những gì tôi cần. Tôi hiểu rằng nó khá phức tạp, đặc biệt là khi bạn nhận được lỗ, đa giác lồi và tương tự. Giả thiết đơn giản duy nhất mà tôi có thể thực hiện là các đa giác tùy ý sẽ không chứa bất kỳ lỗ nào.

Tôi không phải là một chuyên gia trong lĩnh vực này, vì vậy sẽ giống như thuật toán Sutherland-Hodgman? Có thư viện nào ở đó đã thực hiện việc này hay là đặt cược tốt nhất của tôi để đơn giản triển khai thuật toán như được mô tả trong mã giả trên Wikipedia?

Cảm ơn sự giúp đỡ!

+0

Err ...Thuật toán đó sẽ không xử lý các đa giác lõm một cách chính xác, đúng không? – thejh

+0

Đó là sự hiểu biết của tôi, vâng. – ahugenerd

Trả lời

1

Tôi nhận thấy rằng việc sử dụng thư viện JavaGeom hoạt động rất tốt. Nó tích hợp mã từ cổng Java của GPC (không còn khả dụng) và do đó cho phép các hoạt động đa giác tùy ý. Sử dụng SimplePolygon2D và Polygon2DUtils.intersection() Tôi đã có thể có được hoạt động mong muốn.

5

Có bất kỳ thư viện ra khỏi đó mà đã làm được điều này ...

Polygon clipping là một nhiệm vụ phức tạp. Tôi sẽ không khuyên bạn nên cố gắng làm điều đó cho mình, trừ khi bạn muốn chi tiêu nhiều tháng vào nó. Wikipedia liệt kê một số cắt thư viện (và IIRC trong danh sách đó chỉ Clipper là miễn phí để sử dụng trong các ứng dụng thương mại): http://en.wikipedia.org/wiki/Boolean_operations_on_polygons#External_links

ps: Tôi thừa nhận một sự thiên vị cá nhân cho Clipper kể từ khi tôi là tác giả :) Xem thêm thông tin ở đây: http://angusj.com/delphi/clipper.php

1

Âm thanh như Weiler-Atherton là cái bạn cần:

các thuật toán đòi hỏi đa giác được chiều kim đồng hồ và không reentrant (tự giao nhau) . Thuật toán có thể hỗ trợ lỗ (theo chiều kim đồng hồ đa giác hoàn toàn bên trong hình đa giác cha mẹ ), nhưng yêu cầu thêm các thuật toán để quyết định đa giác nào là lỗ.

Đa giác của bạn phù hợp với các tiêu chí đó, đúng không? Tôi không biết về việc triển khai, nhưng có vẻ như bạn nên thực hiện W-A tốt hơn S-H nếu một trong các đa giác của bạn có thể bị lõm.

1

Hãy thử gpc.

+0

Tôi đã tìm thấy GPC, nhưng cổng Java dường như bị hỏng (liên kết chết). – ahugenerd

+0

Liên kết cổng Java dường như hiện lên: http://sourceforge.net/projects/geom-java/files/gpcj/ – mooreds

0

Tôi đã thử nhiều thư viện khác nhau và thư viện hoạt động tốt nhất là JTS Topological Suite là bản quyền Java và LGPL2 thuần túy.

Các vấn đề liên quan