Tôi đang tạo ra một số AI thô sơ cho máy cuộn phụ của mình và tôi cần biết liệu một đơn vị AI có thể đạt đến điểm B từ điểm A hay không chỉ bằng cách nhảy.
Quỹ đạo bay của các nhân vật của tôi hơi bất thường vì họ có thể tác dụng lực trong không trung (ví dụ như trong Jazz Jackrabbit 2), nên không giống như quỹ đạo cổ điển của một viên đạn về ...
con đường mà một viên đạn ném hoặc phóng sẽ đi (...) mà không cần lực đẩy.
... Tôi cho rằng vấn đề của tôi là về một viên đạn có lực đẩy (ví dụ như tên lửa).
Để minh họa điều này, đây là cách đường cong của nhân vật của tôi trông như thế nào nếu tôi nhảy và liên tục nhấn "nút bên trái" (nó trông khác ở đầu bên trái, đây là nơi tôi đang thực hiện một số thao tác trên không trung):
Lực tác dụng trong suốt chuyến bay luôn song song với trục X, do đó, nó là F = (-f, 0) nếu tôi giữ "trái" và đó là F = (f, 0) nếu tôi giữ "phải".
Anh ta có thể di chuyển rất giống một người nhảy trượt tuyết:
Vì vậy, nó khác rất nhiều với quỹ đạo cổ điển đơn giản là một parabola (nguồn: wikipedia ):
Để làm cho nó khó khăn hơn, tôi đang mô phỏng sức cản không khí đơn giản để các nhân vật của tôi chỉ có thể tăng tốc lên đến một số giá trị tốc độ tối đa.
Điều này được thực hiện bằng cách áp dụng một lực nhỏ theo hướng ngược lại :
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize(); //normalizes vector and returns length
body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() );
AIR_RESISTANCE_MULT là một hằng số mà trong trường hợp của tôi bằng 0,1.
Hãy giả sử rằng nhân vật của tôi là một điểm nhỏ vô hạn.
Và tôi KHÔNG xem xét các chướng ngại vật, vì vậy câu hỏi của tôi như thế này ...
Cách xác định (ít nhất là đoán một cách đáng tin cậy), với vận tốc ban đầu V, xung J = (0, -j) mà tôi áp dụng cho nhân vật khi nhảy, trọng lực G = (0, g) , lực F = (+ -f , 0) liên tục được áp dụng trong suốt chuyến bay và AIR_RESISTANCE_MULT nếu chúng tôi thực sự quyết định tính đến sức cản không khí (đây là tùy chọn) , liệu một điểm nằm dưới đường cong được vẽ bởi con đường mà nhân vật của tôi sẽ đi?
Tôi thực sự không biết bắt đầu từ đâu với các tính toán và trên thực tế, tôi không nhất thiết phải quan tâm đến một câu trả lời chính xác; một hack / xấp xỉ hoạt động tốt sẽ là tuyệt vời vì AI không có nghĩa là cần phải hành động hoàn hảo.
chỉnh sửa: Tôi đã quyết định giải quyết vấn đề này bằng cách sử dụng mô phỏng như Jason gợi ý, nhưng làm thế nào để xử lý trường hợp như vậy?
Tôi có nên vẽ một đoạn từ C đến D và kiểm tra xem điểm mong muốn có nằm dưới đoạn này không?
Hoặc tôi nên tìm kiếm nhị phân các dấu thời gian giữa C và D để tìm điểm đủ gần trong khoảng cách ngang đến điểm mong muốn và chỉ sau đó kiểm tra độ chênh lệch dọc? (có vẻ hơi quá mức với tôi)