Đường kẻ của tầm nhìn Đường dẫn ngang qua lưới điều hướng


9

Tôi muốn tính toán đường ngắm trong lưới điều hướng.

Hãy xem xét hình ảnh bên dưới, đường màu vàng là kết quả của chỉ A * và đường màu đỏ là kết quả của thuật toán đường ngắm "sử dụng đường màu vàng làm đầu vào. Bây giờ, đơn vị có thể di chuyển trực tiếp mà không cần zig-zagging.

Một thuật toán để tính toán "đường ngắm" đó là gì?

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

Câu trả lời:


6

Bạn đang tìm kiếm một thuật toán phễu.

Đây là một đơn giản

http://digestingduck.blogspot.com.es/2010/03/simple-stool-funnel-alerskym.html

Về cơ bản, thuật toán xác định các cạnh là các cổng và xây dựng một phễu được kiểm tra dựa vào đỉnh của các cạnh để kiểm tra xem chúng có nằm trong phễu hay không.

Ở bước A, kênh được xây dựng với vị trí bắt đầu và cổng được cắt ngang bởi đường màu vàng.

Trong bước B, cổng tiếp theo được kiểm tra, đỉnh trên nằm trong kênh, do đó, đường trên phễu bây giờ đi qua mặc dù nó. Nhưng đỉnh dưới cùng nằm ngoài kênh vì đường màu đỏ nằm dưới đường màu xanh lục, vì vậy đường dưới sẽ không vượt qua mặc dù nó sẽ tiếp tục đi qua đỉnh dưới cùng của cổng trước.

Vì bạn có thể kiểm tra phễu sẽ nhỏ hơn và nhỏ hơn, cho đến bước F, nơi không thể xây dựng phễu, vì đường màu đỏ tạo ra một phễu xấu, vì vậy đỉnh trên được chọn làm điểm bắt đầu mới và một phễu mới sẽ được xây dựng nếu điểm cuối không nằm trong lưới đó.

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

Nhận ra rằng loại thuật toán này cũng cho phép một giải pháp đơn giản cho vấn đề kích thước mô hình, bởi vì bạn có thể xem xét rằng các cổng nhỏ hơn bằng 2 lần so với mô hình của bạn.

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


6

Có một kỹ thuật đơn giản có thể được sử dụng với các đường dẫn được tạo bằng cách sử dụng dòng ý tưởng này. Về cơ bản, bạn muốn đi theo đường dẫn và tại mỗi nút, "nhìn lại" hai nút trước lần cuối để xem nó có hiển thị hay không. Nếu nút trước cuối cùng hiển thị, bạn có thể xóa nút cuối cùng (vì bạn có đường ngắm giữa nút hiện tại và nút trước cuối, nút cuối cùng, là nút trung gian, không bắt buộc).

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

Một bài viết Gamasutra có ví dụ mã giả sau đây:

checkPoint = starting point of path
currentPoint = next point in path
while (currentPoint->next != NULL)
if Walkable(checkPoint, currentPoint->next)
// Make a straight path between those points:
temp = currentPoint
currentPoint = currentPoint->next
delete temp from the path
else
checkPoint = currentPoint
currentPoint = currentPoint->next

Thuật toán này thực hiện như bạn muốn, trong đó Walkablechức năng về cơ bản là chức năng nhìn thẳng, nhưng được cải thiện một chút để bao gồm các tình huống có thể nhìn thấy đường dẫn, nhưng không thể đi được (ví dụ: hố, bẫy, vùng giới hạn).


Tôi hiểu những gì bạn đang nói, nhưng tôi vẫn không biết cách tính đường ngắm. Bạn có thể mô tả những gì sẽ có trong chức năng Walkable bằng lưới điều hướng tam giác?
Yannick Lange

Câu trả lời này là về đường dẫn dựa trên lưới và vô dụng trong kịch bản lưới điều hướng
Blau
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.