Làm thế nào để tính toán chuyển hướng sang một tên lửa?


14

Tôi có một tên lửa được bắn từ một con tàu ở một góc, tên lửa sau đó quay về phía mục tiêu theo hình vòng cung với bán kính quay đầu cho trước. Làm cách nào để xác định điểm trên vòng cung khi tôi cần bắt đầu quay để tên lửa hướng thẳng đến mục tiêu?

BIÊN TẬP

Điều tôi cần làm trước khi phóng tên lửa là tính toán và vẽ đường bay. Vì vậy, trong ví dụ đính kèm, xe phóng có tiêu đề 90 độ và các mục tiêu nằm phía sau nó. Cả hai tên lửa được phóng ở tiêu đề tương đối -45deg hoặc + 45 độ so với tiêu đề của phương tiện phóng. Các tên lửa ban đầu quay về phía mục tiêu với bán kính quay được biết đến. Tôi phải tính toán điểm mà tại đó lần lượt tên lửa sẽ hướng tới mà nó sẽ quay sang tấn công trực tiếp vào mục tiêu. Rõ ràng nếu mục tiêu ở hoặc gần 45 độ thì không có lần đầu tiên tên lửa chỉ đi thẳng vào mục tiêu.

Sau khi tên lửa được phóng, bản đồ cũng sẽ hiển thị theo dõi tên lửa trên đường này như là dấu hiệu cho thấy đường bay của nó.

Những gì tôi đang làm là làm việc trên một trình giả lập bắt chước phần mềm hoạt động. Vì vậy, tôi cần vẽ đường bay đã tính toán trước khi cho phép phóng tên lửa.

Hai tên lửa nhắm vào hai mục tiêu

Trong ví dụ này, các mục tiêu nằm phía sau xe phóng nhưng các đường dẫn được tính toán trước được rút ra.


1
Là tiêu đề được xác định trước hoặc nó thay đổi trong quỹ đạo? (giống như một tên lửa homing?)
Jonathan Connell

1
Sẽ không phải là khi (x2-x1) ^ 2 + (y2-y1) ^ 2 = r ^ 2, trong đó (x1, y1) là vị trí tên lửa hiện tại và (x2, y2) là mục tiêu?
Vịt Cộng sản

Có lẽ bạn nên thực hiện bản vẽ của những gì bạn muốn.
aaaaaaaaaaaa

3
Đây là vấn đề 2D hay 3D?
Steve H

Nếu bạn đang tìm kiếm một cái gì đó giống như một tên lửa homing, bạn có thể làm điều đó mà không cần sử dụng bất kỳ lượng giác nào. Xem câu hỏi này
BlueRaja - Danny Pflughoeft

Câu trả lời:


9

Toán học của tôi có thể hơi sai, vì vậy tôi đã đưa ra câu trả lời.

Tôi giả sử bạn muốn thực hiện kịch bản homing liên tục - nơi tên lửa P1 di chuyển với vận tốc V1 liên tục cố gắng quay về phía người chơi P2; nhưng với tốc độ quay hạn chế.

  1. Xác định véc tơ giữa người chơi và tên lửa.

    V2 = P2 - P1
  2. Biến chúng thành các vectơ đơn vị.

    V3 = UNIT(V1)
    V4 = UNIT(V2)
  3. Xác định góc giữa các vectơ.

    a = ARCCOS(V3 * V4) (* indicating dot product)
  4. Giới hạn giá trị của góc giữa chúng (hãy nhớ các hàm trig của bạn có thể hoạt động với radian, vì vậy hãy thử 0,1 làm tốc độ quay).

    a = SIGN(a) * MINIMUM(ABS(a), MaximumTurningRate)
  5. Tạo vector chuyển động mới.

    V1 = UNIT(V3.x + SIN(a), V4.y + COS(a)) * MissileSpeed

EDIT: Điều này không có "điểm khởi đầu" vì nó mạnh mẽ hơn (và là một triển khai dễ dàng hơn) cho kịch bản liên tục homing. Bạn không cần phải tìm điểm bắt đầu cho một vòng tròn - chỉ cần giới hạn tốc độ mà tên lửa có thể thay đổi hướng và phần còn lại xảy ra do bóng ma trong máy.


1
Mmm ... nếu bộ nhớ phục vụ, tôi nghĩ rằng bạn cần phải làm một sản phẩm chéo để có được hướng của góc. Nếu bạn chỉ làm một sản phẩm chấm, bạn sẽ biết độ lớn của góc chứ không phải hướng (vì các sản phẩm chấm có thể có V3 * V4 = V4 * V3, dường như không có cách nào để ghi nhận sự khác biệt về hướng). Vì vậy, thực hiện sản phẩm chấm, sau đó thực hiện một sản phẩm chéo - kiểm tra dấu của tọa độ Z - để tìm hướng.
ChrisE

@ChrisE Ví dụ là ở dạng 2D (nhìn 5.), vì vậy hướng ban đầu và cường độ góc phải là đủ.
Keeblebrox

Tính toán góc giữa là chính xác, nhưng tôi không chắc ý định đã nêu của bạn với bước 5 là HOẶC những gì nó tạo ra. Có phải bước 5 giả sử thêm góc a vào v3 vì tôi không hiểu toán.
dlots

@dlots bước 5 được cho là thêm 'góc quay tốc độ giới hạn' mới vào vectơ chuyển động hiện tại - về cơ bản, nó thay đổi hướng của tên lửa.
Jonathan Dickinson

Là gì SIGNtrong bước 4?
Daniel Kaplan

2

Tôi giả sử bạn muốn thay đổi hướng bằng cách thay đổi tiêu đề phóng sang tiêu đề mục tiêu, sau đó tiếp tục đi thẳng đến mục tiêu (một vấn đề thú vị hơn là phải bắn trúng mục tiêu khi rẽ!).

Tôi phải giả định rằng bạn có thể quay với cùng bán kính quay theo mọi hướng (đây là một sự đơn giản hóa khó thấy trong các tên lửa thực).

Giải pháp đơn giản nhất là sử dụng uốn 90 ° : các tệp tên lửa cho đến khi quỹ đạo của nó tạo thành một góc vuông với mục tiêu. nếu bạn quay chính xác ở điểm 90 °, bạn sẽ bỏ lỡ mục tiêu chính xác theo bán kính quay đầu, bởi vì bạn phải tính đến việc xoay chính nó. Giải pháp là bắt đầu quay chính xác "bán kính quay" mét (?) Trước khi đạt đến điểm 90 °, sau đó chuyển thành hình vòng cung (thử đoán) 90 ° để đi thẳng đến mục tiêu của bạn.

Giải pháp này không phải lúc nào cũng khả thi, ví dụ như khi bạn không có khả năng hiển thị trên đường dẫn 90 ° (các tòa nhà hoặc các chướng ngại vật khác).

Tin tốt là giải pháp hoạt động cho mọi góc độ (không chỉ 90 ° huyền thoại), mẹo là tính đến không gian cần thiết để bắt đầu quay đầu trước đó.

Bao nhiêu trước đây? Đây là lý do tại sao các công cụ 90 ° là giải pháp đơn giản nhất ...

Giả sử bạn đạt được tầm nhìn hoặc tiêu đề mục tiêu tốt nhất khi đường bắn tạo thành một góc θ ° thì bạn nên dự đoán lần lượt bằng cách:

(sec(90° - θ°) + tan(90° - θ°)) * turning_radius

... Trong đó secant là đối ứng của cosin. Bằng chứng là tầm thường và để lại cho người đọc.

Nghiêm túc mà nói, công thức đến từ một cấu trúc hình học đơn giản.

Đồ thị điểm quay

Đường màu đen là đường bắn, trong khi đường màu đen mỏng là đường dẫn tương tự di chuyển về phía mục tiêu bằng các đơn vị Turn_radius; tương tự cho những cái màu đỏ là đường dẫn đích.

Các đoạn màu xanh lá cây có chiều dài Turn_radius vì vậy bạn sẽ thấy rằng:

AB là tiếp tuyến 90 ° - °

BC là bí mật.

Cả hai đường màu xanh lá cây xuất phát từ bước ngoặt đều có chiều dài rẽ và vuông góc với hai đường dẫn; có nghĩa là bán kính quay là chính xác và cung tròn tiếp xúc với cả hai đường dẫn (vì nó sẽ là nếu bạn rẽ trong các ràng buộc vật lý).

Hãy cho tôi biết nếu bạn thấy một số lỗi.

BIÊN TẬP:

Bản vẽ bạn đang đăng cho thấy có nhiều lựa chọn cho đường dẫn ngay cả với mục tiêu và game bắn súng cố định như bạn có thể thấy ở đây:

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

Khi mục tiêu được chọn, bạn có thể áp dụng những gì tôi đã nói ở trên với các góc thích hợp.


Xin lưu ý rằng đây không phải là một hệ thống cập nhật liên tục. Vì việc homing đòi hỏi nhiều cpu (rất nhiều), nên điều này cần được xem xét là cách tiếp cận phù hợp cho các mục tiêu cố định hoặc nếu ai đó muốn thực hiện một tên lửa "bán câm". Quỹ đạo có thể chỉ đơn giản là tham số hóa trên t chia đường dẫn trong 3 đường con và cung có thể được xấp xỉ bằng một đường cong Bezier.
FxIII

1

Tôi sẽ thực hiện một "hành vi lái" cho tên lửa. Tên lửa có: Một vận tốc (một số), một vị trí (một vectơ) và một vòng quay (hiện tại). Ở mỗi bản cập nhật trong trò chơi của bạn / ở mỗi khung hình, vòng quay của tên lửa chỉ được thay đổi một chút (về phía mục tiêu). Sau đó, tên lửa được di chuyển về phía trước theo vòng quay hiện tại và vận tốc hiện tại của nó.

Hoạt động cho 2D và 3D rõ ràng, vì sự khác biệt duy nhất là một chiều bổ sung.

Một khả năng khác là tính toán đường đi của tên lửa trước khi bắn nó. Tra cứu đường cong bezier hoặc spline .


Vấn đề với việc sử dụng một spline ở đây là bạn sẽ cần liên tục cập nhật các điểm kiểm soát nếu mục tiêu di chuyển. Một thuật toán lái đơn giản ở đây có thể được tính toán rẻ hơn.
ChrisE

Thật ra tôi đang cố gắng định trước đường dẫn đến mục tiêu. Những gì tôi đang làm là một trình giả lập cho một số thiết bị thực và tôi đang cố gắng bắt chước hành vi của thiết bị thực.
Tony

0

Tôi cảm thấy như bạn đang giải quyết vấn đề sai ở đây. Một tên lửa trong thế giới thực sẽ không lo lắng về nơi cần quay, nó chỉ đơn giản là sẽ quay cho đến khi nó nhắm vào mục tiêu của nó. Việc tính toán duy nhất liên quan là khi nào bắt đầu đưa các điều khiển trở về trạng thái trung lập vì một tên lửa trong thế giới thực không thể thay đổi ngay lập tức tốc độ quay của nó. Tính toán đó sẽ chỉ lấy tốc độ không khí được chỉ định của tên lửa làm giá trị đầu vào và tôi nghĩ sẽ được tính toán trước.


2
Một tên lửa trong thế giới thực, đặc biệt là các vũ khí sau này có hệ thống dẫn đường quán tính hoặc GPS hoặc cả hai để chúng được lập trình để đi đến khu vực tìm kiếm và bắt đầu tìm kiếm mục tiêu. Khốn kiếp nếu một người bạn thân ở gần. Việc lập trình được cho là cho phép bạn gửi tên lửa trên một con đường tránh bạn bè và các chướng ngại vật khác như người đi bộ và người ngoài cuộc vô tội.
Tony

0

Tôi nghĩ rằng thuật toán đơn giản nhất sẽ chỉ tuân theo hai quy tắc:

  1. Nếu mục tiêu hiện tại gần tên lửa hơn đường kính quay thì tiếp tục đi thẳng. Điều này tránh được tên lửa quay quanh các mục tiêu gần thay vì thực sự tiếp cận chúng.

  2. Nếu không thì quay về phía mục tiêu cho đến khi bạn chỉ vào nó.

Để tính điểm mà điểm rẽ kết thúc ở dạng 2D:

  1. Tại điểm mà bạn muốn bắt đầu rẽ, tâm của vòng tròn xoay được đặt theo hướng vuông góc với tiêu đề hiện tại ở khoảng cách bán kính quay của bạn. Lưu ý rằng có hai trong số những điểm đó - bạn có thể muốn điểm gần nhất với mục tiêu của mình. Tính vị trí đó và gọi nó là P.

  2. Bây giờ bạn có thể xây dựng một tam giác góc vuông với góc vuông tại tiếp tuyến và hai điểm đã biết - P và đích đến của bạn. Điều này cho phép bạn tính khoảng cách từ tiếp tuyến đến điểm mục tiêu của bạn với Pythagoras. Gọi nó là D.

  3. Bây giờ bạn cần tính toán giao điểm của một vòng tròn bán kính D tại điểm đến của bạn với vòng tròn xoay của bạn. Bạn sẽ nhận được hai giải pháp là hai điểm tiếp tuyến trên vòng tròn nơi tên lửa sẽ dừng quay (một cho mỗi hướng di chuyển quanh vòng tròn). Chọn điểm ở phía trước tên lửa - đó là câu trả lời của bạn.

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.