Làm thế nào để tam giác từ một sơ đồ Voronoï?


13

Tôi đã tính toán sơ đồ Voronoï từ một tập hợp các điểm (với Boost.polygon ).

Tôi cố gắng tìm một tam giác Delaunay, kết nối từng trung tâm tế bào cho mỗi cạnh Voronoï, nhưng tôi bỏ lỡ một số cạnh.

Trong hình ảnh sau đây, các chấm màu đỏ là các điểm ban đầu của tôi, các đường màu xanh là các cạnh Voronoï (tôi bỏ qua các cạnh vô hạn) và các đường màu xanh lá cây là các cạnh tam giác (một cạnh màu xanh lá cây cho mỗi cạnh màu xanh lam, kết nối hai nguồn gốc của ô).

Chúng ta có thể thấy rằng các cạnh chéo bị thiếu. Tôi đang thiếu gì?

sơ đồ voronoi

Câu trả lời:


19

Điểm trung tâm trong sơ đồ của bạn là một cạnh suy biến của sơ đồ Voronoi. Nếu bạn tạo sơ đồ Voronoi cho đám mây điểm không đều, mọi đỉnh sẽ có độ 3. Một đỉnh có độ 4 (hoặc nhiều hơn) chỉ có thể xảy ra khi hai (hoặc nhiều) đỉnh trùng nhau. Điều đó có nghĩa là có một cạnh có độ dài bằng không giữa chúng. Nhưng cạnh đó vẫn phải có một cạnh tương ứng trong tam giác Delaunay. Vấn đề là tùy ý trong số hai cạnh có thể bạn chọn, bởi vì cạnh có độ dài bằng không có hướng liên quan.

Để hình dung những gì tôi đang nói, hãy xem xét bắt đầu với bốn điểm cách nhau ít thường xuyên hơn (như chúng ta bắt đầu chỉ với các đỉnh cấp 3) và dần dần chuyển chúng sang các vị trí thông thường.

Chúng tôi có thể làm điều này theo hai cách khác nhau, cả hai đều dẫn đến trường hợp thoái hóa trong sơ đồ của bạn. Bạn sẽ thấy rằng bạn kết thúc với hai tam giác Delaunay khác nhau, cả hai đều là giới hạn hợp lệ cho trường hợp suy biến:

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

Tôi giả sử rằng mã của bạn thiếu trường hợp suy biến này vì lý do này hay lý do khác, nhưng không thực sự thấy cách bạn tính toán tam giác Delaunay từ sơ đồ Voronoi, không thể chỉ ra cho bạn thêm điều này.

Cũng lưu ý rằng việc có độ thoái hóa thậm chí cao hơn (bằng hơn bốn điểm phân bố ở các góc bằng nhau xung quanh một vòng tròn) có thể cần phải chú ý thêm:

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

Những hình ảnh động này cũng cho thấy (ngay cả trong trường hợp không suy biến), các cạnh Voronoi và Delaunay tương ứng không nhất thiết thực sự giao nhau trong phạm vi hữu hạn của chúng. Điều đó có thể làm cho khó khăn hơn khi thấy rằng 2 (hoặc 3) cạnh tam giác đa giác đều ở cuối thực sự tương ứng với một số cạnh suy biến nằm ở trung tâm. Cũng lưu ý rằng trong tổng số có 5 hình tam giác khác nhau của hình ngũ giác và 14 hình tam giác của hình lục giác (mặc dù tôi không biết liệu tất cả 14 có thể thu được bằng cách làm biến dạng hình tam giác không suy biến).

Chỉnh sửa (bởi OP)

Các sơ đồ Voronoi được tính toán với Boost.polygon cho phép đi qua từng đỉnh Voronoi và mỗi cạnh được liên kết với các đỉnh đó (theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ). Theo cách này, có thể tạo một hình tam giác cho mỗi cặp cạnh (hai cạnh được kết nối sẽ liên kết với 3 ô).


Bạn có thể trả lời ở đây là tốt hoặc tôi sẽ xóa câu hỏi khác của tôi.
arthur.sw

3
@ arthur.sw Việc đăng chéo thường không được khuyến khích trên SE, vì vậy tôi cho rằng việc xóa nó sẽ có lựa chọn tốt hơn.
Martin Ender

một người tạo sơ đồ voronoï tương tác: alexbeutel.com/webgl/voronoi.html
arthur.sw

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.