Làm thế nào tôi có thể yếu tố đà vào sim không gian của tôi?


8

Tôi đang thử sức mình trong việc tạo ra một động cơ vật lý 2d đơn giản ngay bây giờ và tôi đang gặp phải một số vấn đề tìm ra cách kết hợp động lượng vào chuyển động của tàu vũ trụ.

Nếu tôi đang di chuyển theo một hướng nhất định với một vận tốc nhất định, hiện tại tôi có thể cập nhật vị trí tàu của mình một cách dễ dàng (Position + = Direction * Velocity). Tuy nhiên, nếu con tàu quay hoàn toàn và tôi tính toán lại hướng (dựa trên góc mới mà con tàu đang đối mặt) và tăng tốc theo hướng đó, làm thế nào tôi có thể tính đến động lượng để thay đổi "đường" mà con tàu di chuyển? Hiện tại con tàu thay đổi hướng tức thời và tiếp tục với vận tốc hiện tại theo hướng mới khi tôi nhấn nút lực đẩy. Tôi muốn nó là một chuyển động quay dần dần để tạo ấn tượng rằng bản thân con tàu có khối lượng.

Nếu đã có một bài viết hay về chủ đề này, tôi xin lỗi, nhưng không có gì xuất hiện trong các tìm kiếm của tôi. Hãy cho tôi biết nếu cần thêm thông tin, nhưng tôi hy vọng ai đó có thể dễ dàng cho tôi biết làm thế nào tôi có thể ném khối lượng * vận tốc vào bản cập nhật vòng lặp trò chơi của mình.


Nếu bạn đang tìm kiếm nhiều hơn như cách lập trình chuyển động, bạn có thể muốn xem trò chơi miễn phí Transcendence, một game bắn súng không gian 2d khác sử dụng điều đó. Có lẽ bạn có thể xem các tập lệnh của nó hoặc hỏi các nhà phát triển về cách họ đã làm nó
Mastersteviekun

Câu trả lời:


7

Có vẻ như bạn có Vị trí và Hướng là vectơ và Vận tốc như một vô hướng?

Nếu vậy, chỉ cần thay đổi Vận tốc thành một vectơ và sau đó làm một cái gì đó như thế này:

Force = Direction * Power
Acceleration = Force / Mass
Velocity += Acceleration * ElapsedTime
Position += Velocity * ElapsedTime

Hướng là một vectơ chiều dài đơn vị cho tiêu đề của tàu của bạn. Sức mạnh là lượng lực đẩy bạn muốn thêm (Không khi không cần tăng tốc) ElapsedTime là thời gian giữa trò chơi của bạn Cập nhật các cuộc gọi để giữ cho chuyển động trơn tru ngay cả khi tốc độ khung hình của bạn thay đổi

Nếu bạn muốn biết thêm về nó, bạn có thể tra cứu Euler Integration


1
Đúng và bước tiếp theo là mô hình Định luật Newton F = m * a. Vì vậy, thay vì sử dụng hằng số "Sức mạnh" để tăng tốc, bạn sử dụng Gia tốc = Lực lượng / khối lượng. Vì vậy, khi bạn áp dụng lực đẩy, bạn áp dụng nó như một vectơ lực. Làm điều này sẽ cho phép bạn áp dụng các lực khác vào tàu vũ trụ của mình một cách dễ dàng bằng cách cộng tất cả các vectơ lực lại với nhau và tính toán gia tốc tương ứng. Cũng có nghĩa là bạn có thể chơi với Mass như một biến riêng biệt.
TerryB

Terry là chính xác, tôi quên kết hợp nó trong bài viết gốc của tôi.
Ông Bell

Cảm ơn ông Bell / Terry. Cả hai phương trình được liệt kê ở trên đã giúp tôi lập trình làm điều này. Tôi đã gặp rất nhiều khó khăn để hiểu làm thế nào điều này sẽ hoạt động khi cố gắng sử dụng phao khắp nơi. Sau khi chuyển đổi mọi thứ trừ khối lượng sang vectơ (nhờ leftium ở trên), cuối cùng tôi đã có thể khiến mọi thứ hoạt động.
Josh Petite

8

Thay vì điều khiển vận tốc trực tiếp, hãy thêm một biến khác: gia tốc , dần dần, làm thay đổi vận tốc một cách trơn tru :

Từ vật lý cổ điển ( định luật chuyển động của Newton ):

a =  F/m  // a Force will result in a smaller acceleration on objects with more mass
v += a    // acceleration is the rate of change in velocity
p += v    // velocity is the rate of change in position    

Ở đâu:

a = acceleration, v = velocity, p = position
F = force, m = mass

(Lưu ý m là giá trị vô hướng duy nhất; F, a, v và p đều là các vectơ 2D hoặc 3D)

Ngoài ra, thực tế có hai hướng:

  1. Hướng tàu đang đối mặt. Lực từ động cơ được áp dụng dọc theo vector này.
  2. Hướng tàu đang thực sự di chuyển (do đà). Đây là vectơ vận tốc v.

Tôi đã trả lời một câu hỏi liên quan trên StackOverflow: toán học chuyển động 2D Spaceship . Có một số mã mẫu trong câu trả lời đó.


Lưu ý rằng trong một mô phỏng dựa trên đánh dấu bằng phương pháp đó sẽ cung cấp cho bạn kết quả không chính xác. Các công thức cơ bản là chính xác trong thế giới vật lý liên tục, nhưng bạn sẽ cần thực hiện tích hợp số để có được kết quả chính xác. Thêm chi tiết tại đây: gafferongames.com/game-physics/integration-basics
Tetrad

Cuối cùng đã làm việc này. Cảm ơn mọi người rất nhiều. Phải mất một thời gian để tìm ra cách phân tích sự kiện đầu vào này một cách khôn ngoan cùng với bản cập nhật của tôi (cũng như kết hợp việc sử dụng thời gian).
Josh Petite
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.