Làm việc với thuật toán kênh được hiển thị trên Digesting Duck Tôi không chắc cách phát hiện kênh hoạt động.
Ai đó có thể giải thích phương pháp rõ ràng cho tôi hoặc đề xuất một cách khác để phát hiện kênh và nếu các mặt phễu trùng nhau không?
Làm việc với thuật toán kênh được hiển thị trên Digesting Duck Tôi không chắc cách phát hiện kênh hoạt động.
Ai đó có thể giải thích phương pháp rõ ràng cho tôi hoặc đề xuất một cách khác để phát hiện kênh và nếu các mặt phễu trùng nhau không?
Câu trả lời:
Thuật toán bắt đầu với một đường dẫn bạn tìm thấy trước đó, trong trường hợp này là danh sách các hình tam giác:
Mã ở dưới cùng của bài đăng trên blog của Mikko xây dựng mảng cổng, là danh sách các phân đoạn dòng đại diện cho các phân đoạn dòng giữa các đa giác của đường dẫn. Đây là những "cổng" mà đường dẫn được làm mịn phải đi qua (hoặc các cạnh đa giác từ "hãy theo dõi các trung điểm cạnh đa giác"). Lưu ý rằng danh sách cổng bắt đầu và kết thúc với các đoạn đường suy biến ở điểm bắt đầu và điểm mục tiêu.
Danh sách cổng này được hiển thị dưới dạng các đoạn đường chấm màu vàng trong ảnh của anh ấy.
Thuật toán bắt đầu với một phễu rộng và tiến hành bằng cách lặp đi lặp lại các mặt phễu về phía trước dọc theo các điểm bên cổng (điểm cuối của các đoạn đường) miễn là điều này thắt chặt kênh (AD).
Điều này có nghĩa là mỗi lần di chuyển về phía trước nên di chuyển các cạnh phễu vào bên trong, điều này có thể được kiểm tra bằng sản phẩm chéo của các vectơ đại diện cho phía cũ và phía mới tiềm năng ( P × Q trong hình ảnh bên dưới; cũng thấy triarea2
trong mã của Mikko). Nếu việc di chuyển về phía trước cho một bên sẽ không thắt chặt kênh, chúng tôi không cập nhật phía đó cho lần lặp hiện tại của các cổng (E).
Trường hợp khác cần xử lý là khi phễu thoái hóa thành một đoạn đường. Để giải thích cho vấn đề này, thuật toán sẽ kiểm tra xem một trong hai bên có ở phía "sai" hay không bằng cách sử dụng lại sản phẩm chéo, lần này là các vectơ được tạo bởi đỉnh phễu và điểm cuối bên phải và bên trái ( R × S trong hình ảnh bên dưới).
Nếu đây là trường hợp, vectơ từ đỉnh phễu và điểm cuối bên đúng được thêm vào đường dẫn được làm mịn ( R trong hình trên) và thuật toán được khởi động lại với điểm cuối là đỉnh mới (FG), trừ khi, Tất nhiên, nếu đó là điểm mục tiêu.