Điều chỉnh Aim Angle cho chuyển động với đạn tăng tốc


7

Vì vậy, đây là vấn đề của tôi:

Tôi có một tháp pháo gắn vào một con tàu di chuyển với tốc độ thay đổi trong thế giới trò chơi của tôi, bắn vào trung tâm của một con tàu khác đi qua thế giới trò chơi trong một vectơ có thể khác. Hiện tại, tôi có được góc mà tôi cần chụp khi sử dụng atan2:

double targetAngle = Math.Atan2(ship.CurrentTarget.Position.Y - ship.Position.Y, ship.CurrentTarget.Position.X - ship.Position.X);

Điều này hoạt động tốt khi cả hai tàu đều đứng yên, hoặc di chuyển rất chậm, nhưng nếu di chuyển nhanh hơn, mục tiêu bị tụt lại phía sau. Một phần thú vị khác của câu đố: vectơ của viên đạn không tĩnh, chúng bắt đầu từ 0 và tăng tốc độ. Vị trí của họ được tính như sau:

var direction = new Vector2((float)Math.Cos(currentRotation), 
                (float)Math.Sin(currentRotation));

            if (direction.Length() > 0)
                direction.Normalize();

            var velocity = new Vector2(direction.X * MotionData.CurrentSpeed,
                direction.Y * MotionData.CurrentSpeed) + additiveVector;

Trong đó additiveVector là véc tơ của tàu của tôi tại thời điểm phóng đạn. CurrentSpeed ​​sẽ được thêm vào mọi khung hình cho đến khi nó đạt tốc độ tối đa tĩnh.

Cho đến nay, vấn đề tôi gặp phải với các giải pháp khác để bù vào mục tiêu của tôi là các công thức dựa trên vận tốc tĩnh cho đạn, còn tôi thì không.


Tôi muốn nói rằng bạn phải thiết lập một phương trình mà sau đó bạn phải giải. Cố gắng thiết lập các chức năng phóng (t) và đích (t). Ptojectile (t) phụ thuộc vào góc ngắm của bạn. Bạn sẽ có 2 biến không xác định (alpha và t). Sau đó, bạn sẽ phải cố gắng tìm một giải pháp bằng các phương tiện toán học. Bạn có thể gặp vấn đề khi thiết lập chức năng phóng vì nó tăng tốc đến giá trị tối đa. Bạn có thể thử làm là không có triệu chứng để đơn giản là toán học của bạn. Chỉ cần một cái gì đó để suy nghĩ.
LukeG

Câu trả lời:


1

Vấn đề chính của bạn là bạn có hai vật thể (tàu) và chúng di chuyển với tốc độ khác nhau và vật thể thứ ba tăng tốc theo thời gian và bạn muốn biết điểm mà bạn phải nhắm vào tàu. Với câu hỏi này, bạn nhận được câu hỏi tương tự như các lập trình viên quân sự - và bạn có rất nhiều biến số và không bao giờ có cơ hội 100% để biết điểm thực.

Bạn phá vỡ nó thành phần chuyển động và không bao gồm gió, sóng và vân vân - điều đó làm cho nó dễ dàng hơn nhưng không dễ dàng. ^^

Bạn có 5 biến trong công thức này:

  • góc tàu (2) góc của mỗi tàu có thể thay đổi (?) - nếu chúng bắt đầu rẽ
  • tốc độ tàu (2) tốc độ của mỗi tàu tăng lên tối đa
  • tốc độ đạn (1) tốc độ của viên đạn tăng theo thời gian

Hiệu ứng đầu tiên là các vị trí có thể đánh vào con tàu khác, lần cuối cùng rất quan trọng để biết viên đạn bay trong khoảng cách bao lâu và lần này phải thay đổi góc như thế nào.

Để giải quyết điều này, bạn có hai cách, tôi biết:

1. Bảng

Giải pháp đầu tiên có thể là một cái gì đó giống như một bảng / ma trận nơi bạn xác định nhiều cặp giá trị và tìm kiếm các cặp hiện tại như thế nào góc của bạn - điều này sẽ dẫn đến cơ hội hạ thấp con tàu khác nhưng nhanh hơn.

2. Tính toán

Thứ hai là, giống như bạn đã thử nó, một công thức phức tạp để tính toán với tất cả các tham số điểm đích chính xác.

Một số ý tưởng cho việc này:

  1. có được khoảng cách hiện tại giữa hai tàu và thời gian viên đạn của bạn cần
  2. tính toán chênh lệch tốc độ của cả hai tàu để biết bạn hoặc tàu kia sẽ đi trước trong bước 1 - với thông tin này bạn biết nếu bạn phải điều chỉnh góc dương hay âm và bạn biết, nguyên nhân của thời gian bước 1, sự khác biệt sẽ là bao nhiêu mét
  3. lấy góc giữa hai tàu - nếu chúng không song song bạn phải điều chỉnh khoảng cách viên đạn của bạn phải bay khiến tàu kia đến gần hoặc xa hơn với bạn

Với các infos này, bạn sẽ có tất cả các tham số giải quyết nhu cầu tính toán của mình - với các infos này, bạn có thể có được tọa độ của tàu khác nếu viên đạn của bạn bắn trúng. Và sau đó bạn có thể tính toán góc cho tháp pháo / viên đạn của mình theo tọa độ được cung cấp chứ không phải vị trí hiện tại của con tàu.


+1 cho 3 điểm cuối cùng, đó là ý chính của những gì bạn cần tính toán. Nhận thời gian, điều chỉnh góc dựa trên vị trí mới và sử dụng góc mới đó. Nên phù hợp với hệ thống của bạn một cách hoàn hảo.
Thủ tướng Bromanov

0

Để mở rộng ( một cách bạn có thể làm ) toán học đằng sau câu trả lời của @ Gummibe ..

Hãy ghi nhớ tính toán vật lý này

d = vt + 1 / 2at 2
hoặc
khoảng cách = ban đầu Tốc độ * thời gian + 1/2 gia tốc * thời gian 2

Giả sử tháp pháo của bạn ở [0,0] và kẻ địch ở [10,0] và ..
Giả sử viên đạn của bạn bắt đầu với vận tốc 0, và tăng tốc với tốc độ 1 đơn vị / giây / giây

Nếu chúng ta nhắm vào nơi kẻ thù đang ở, thì totalDistancecó 10 đơn vị. Hãy cũng nói rằng chúng tôi accelerationlà 1 [đơn vị] đơn giản mỗi giây, mỗi giây. ( Một lưu ý quan trọng là giữ tất cả các khoảng cách và tất cả các khung thời gian trên cùng một tỷ lệ )

10 = 0 * thời gian + 1/2 1 * thời gian 2 ...
10 = 1/2 * thời gian 2 ...
20 = thời gian 2
thời gian = 4,4721359 giây

Vì vậy, bây giờ chúng tôi biết rằng mục tiêu có lượng thời gian đó để thay đổi vị trí của họ. Có rất nhiều chiến lược bạn có thể sử dụng để đoán xem họ sẽ chuyển đến đâu trong khoảng thời gian đó. Đơn giản nhất sẽ là lấy vận tốc hiện tại của họ, giả sử họ sẽ tiếp tục với vận tốc đó và tính toán lại vị trí mới đó.

Tuy nhiên, lưu ý rằng có một nghịch lý ở đây ngăn bạn tìm thời gian và vị trí va chạm chính xác với mục tiêu, mặc dù bạn có thể tiến rất gần. Bằng cách tính toán lại vị trí mới của họ, sẽ có sự thay đổi trong tính toán thời gian, điều đó có nghĩa là bạn có thể tính toán lại vị trí đã điều chỉnh của họ sau đó, và sau đó, và sau đó - mỗi lần lặp lại ngày càng chính xác hơn, nhưng không bao giờ đạt được 100 % sự chính xác. Đây là một trong những nghịch lý của Zeno - Achilles và rùa .

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.