Thuật toán Phễu đơn giản hoạt động như thế nào?


Câu trả lời:


18

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:

con đường

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.

cổng thông tin

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).

thuật toán

Đ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 triarea2trong 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).

di chuyển vào trong

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).

phễu thoái hóa

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.


2
@Rolfcore Câu trả lời có rõ ràng không? Nếu không, phần nào cần cải thiện?
Eric

Tôi nghĩ rằng anh ấy chỉ quên chấp nhận câu trả lời, câu hỏi này rất hay và nên được nâng cấp một cách nghiêm túc ^^.
Nhà phát triển GameD

Có lẽ, toncha gotcha, là trong khi di chuyển F bạn không nói rằng chúng ta không bắt đầu lại từ đầu bởi vì có khả năng một góc hẹp hướng về phía nam sẽ tạo ra một phễu chặt nhất, vì vậy chúng ta phải chờ các bên bot thực sự thất bại kiểm tra và không chỉ một. Vì vậy, chúng tôi làm điều đó trong G thay vì F .. giải thích tốt dù sao :)
Nhà phát triển GameD
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.