Trọng lực hành tinh 2D


15

Tôi đang cố gắng tạo ra một trò chơi đơn giản, nơi một con tàu vũ trụ được phóng lên và sau đó con đường của nó bị ảnh hưởng bởi lực hấp dẫn của các hành tinh.

Tương tự như trò chơi này: http://sciencenetlinks.com/interactives/gravity.html

Tôi muốn biết làm thế nào để tái tạo hiệu ứng của các hành tinh trên tàu vũ trụ trong trò chơi này để tàu vũ trụ có thể 'vòng' quanh một hành tinh để đổi hướng.

Tôi đã xoay sở để đạt được một số kết quả không có thật trong đó các vòng tàu vũ trụ trong một hình elip khổng lồ trên khắp hành tinh hoặc chỉ bị ảnh hưởng đôi chút bởi lực hấp dẫn của một hành tinh sử dụng vectơ.

Cảm ơn trước.

ps Tôi có rất nhiều kinh nghiệm mã hóa không có gì để làm với dev game.

Câu trả lời:


15

Trong trường hợp của bạn có một tàu vũ trụ, di chuyển bị ảnh hưởng bởi trọng lực của tất cả các hành tinh. Mỗi hành tinh tác dụng lực bằng 'm1 * m2 / r ^ 2' trong đó m1 và m2 đại diện cho khối lượng tàu vũ trụ và hành tinh, và r bằng khoảng cách euclide của hành tinh và tàu không gian. bạn chỉ cần tính tổng của tất cả các lực được áp dụng cho tàu. từ các quy tắc của newton, chúng ta biết 'f = m * a' trong đó f là tổng lực tác dụng lên một vật thể, m là khối lượng và a là gia tốc. từ thời điểm này, bạn có thể đọc trang này để tìm hiểu cách sử dụng gia tốc để tính vận tốc và vị trí theo thời gian.


+1 Tài nguyên tuyệt vời mà bạn đã liên kết, giải thích phương pháp tích hợp Runge-Kutta bậc 4 và mọi thứ.
David Gouveia

Vấn đề của tôi lúc này là con đường tàu vũ trụ đi. Tôi cần nó để trở nên 'giống như trò chơi' hơn. Tôi đã tạo ra một bức tranh đơn giản để thể hiện điều tôi muốn nói. i44.tinypic.com/2w2kdo4.jpg A là những gì tôi có bây giờ, B là những gì tôi muốn.
nướng

@baken: và tăng khối lượng của hành tinh sẽ không hoạt động?
Jesse Emond

5
Ngoài bài viết về Gaffer trên Games, bạn hoàn toàn cần đọc bài viết Codeflow này ! Runge-Kutta không giống như đặt cược tốt nhất của bạn ở đây.
sam hocevar

Nếu bạn có A và muốn B, làm thế nào về việc giảm vận tốc ban đầu của tàu vũ trụ của bạn?
Bến

4

Mỗi hành tinh nên có trường hấp dẫn kéo bất kỳ vật thể nào trong vùng lân cận về phía trung tâm của nó. Nói cách khác, bạn nên tác dụng một lực từ vị trí của tàu vũ trụ vào trung tâm hành tinh mỗi bước mô phỏng.

Lực này phụ thuộc vào khối lượng của cả hai vật thể, nhưng trong trường hợp này, vì khối lượng tàu vũ trụ có thể không đáng kể so với hành tinh, bạn chỉ cần thử hằng số khác nhau tùy thuộc vào kích thước của hành tinh cho đến khi bạn cảm thấy đúng.

Quan trọng nhất, lực này càng yếu thì khoảng cách giữa hai vật càng lớn. Bạn sẽ làm điều này bằng cách chia cho khoảng cách bình phương giữa cả hai. Sau một khoảng cách nhất định, bạn có thể muốn "cắt" thủ công và ngừng áp dụng lực.

Chỉ cần dịch lực này thành gia tốc, và các phương trình vật lý cơ bản sẽ chăm sóc phần còn lại.

Trong mã giả

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

Điều này thực sự khá giống với cách tôi đang làm nó hiện tại. Có lẽ đó chỉ là vấn đề chơi với các hằng số?
nướng

2
Không chắc lắm nhưng tôi có thể nói bây giờ có lẽ chỉ là điều chỉnh. Và tôi nghĩ nó cũng phụ thuộc vào lực ban đầu mà bạn áp dụng cho tàu vũ trụ để đưa nó vào quỹ đạo.
David Gouveia
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.