2011-10-27 32 views
7

Tôi có đa giác được xác định với đỉnh của chúng và tôi cần tính toán các khu vực của liên minh và giao lộ của chúng. Điều khó chịu nhất là nó được thực hiện trong Mapping Toolbox, nhưng tôi không thể mua nó. Có ai biết làm thế nào để thực hiện một thuật toán nhanh để tính toán nó? Cảm ơn bạn đã dành thời gian.giao lộ và liên minh các đa giác

+0

Chức năng này là 'polybool'. Và tôi có thể tính toán diện tích bằng 'polyarea' (có sẵn cho tôi). – Kate

+0

Tôi nghĩ bạn không nên yêu cầu người dùng vi phạm bản quyền. Đã chỉnh sửa. –

+0

@Kate: Đa giác của bạn có được đảm bảo lồi không? – Jacob

Trả lời

0

tôi thấy điểm giao điểm của đa giác của tôi và thêm vào đỉnh mà là bên trong/đa giác bên ngoài cho nhiệm vụ giao/công đoàn (kiểm tra nếu có các đỉnh của đa giác 1 sự dối trá bên trong một lại đa giác 2 và ngược sử dụng 'inpolygon '). Sau đó tất cả các điểm được chuyển đổi thành các tọa độ cực với trung tâm trong các tọa độ trung bình của ma trận và được sắp xếp theo góc, sao cho chúng hình thành đường bao khép kín liên tiếp. Biết được điều này rất dễ dàng để tìm khu vực giao lộ/công đoàn bằng cách sử dụng 'polyarea'.

1

tôi sẽ làm như thế này:

  1. Hãy S là tập các đỉnh của cả hai đa giác.
  2. Đối với mỗi cạnh e trong đa giác 1
    1. Đối với mỗi cạnh e trong đa giác 2
      1. Nếu e giao cắt với e
        1. Thêm điểm giao nhau để S
  3. Hủy bỏ tất cả các đỉnh trong S được bên trong đa giác 1 hoặc 2.

Tập kết quả của đỉnh nên tạo nên sự kết hợp của các đa giác.

Đối với giao lộ, bạn chỉ cần xóa tất cả các đỉnh trong Sbên ngoài của cả đa giác 1 và 2 (ở bước thứ ba).

(Bạn có thể tra cứu giao điểm và "bên trong đa giác" -checks nơi khác ;-)

+0

cảm ơn câu trả lời của bạn, nhưng làm cách nào tôi có thể tìm thấy điểm giao nhau? là cần thiết để sử dụng phương trình của một dòng? – Kate

+0

Đã thêm hai liên kết vào câu trả lời của tôi. – aioobe

+0

cảm ơn bạn. Tôi biết toán học, nhưng tiếc là tôi không phải là một lập trình viên rất tốt, vì vậy có mã số rất tốt đẹp. – Kate

0

Ý tưởng là để phá vỡ tất cả các giao nhau cạnh thành bốn các bộ phận và tạo thành một đa giác mới với những phần này. Khi bạn muốn liên minh, lấy hai cạnh ngoài. Nếu bạn muốn giao nhau, lấy hai cạnh bên trong.

+0

Câu trả lời hay sẽ đưa ra một ví dụ. –

3

Bạn chỉ cần tìm khu vực giao lộ; khu vực của công đoàn là trivially thu được từ đó. Gói PolygonIntersection từ FEX có thể hữu ích.

enter image description here

+1

Bạn có thể hiển thị một số mã giả để chúng tôi có thể thực hiện điều này bằng các ngôn ngữ khác không? – Pacerier

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