Câu trả lời:
Cách đơn giản nhất là tích hợp Euler. Bạn phải lưu trữ vector vị trí và vector vận tốc. Tại mỗi khung:
( x cho vô hướng, X cho vectơ)
hãy chắc chắn rằng dt nhỏ ...
| G | là khoảng 9,8 m / s² đối với trái đất và khoảng 1,6 m / s² đối với mặt trăng
nói chung, lực hấp dẫn do tương tác trọng lực là:
Nó ảnh hưởng đến từng cơ thể và nó hướng về phía người khác.
Các G vô hướng là rất nổi tiếng hằng số hấp dẫn đó là về 6.67e-011 N (m / Kg) ²
Vì bạn quan tâm đến việc tăng tốc:
Bạn chỉ cần biết khối lượng của hành tinh (m2) và bán kính (r) để tính gia tốc của bạn.
Thông thường, gia tốc di chuyển hành tinh về phía tàu vũ trụ của bạn là không đáng kể vì thường m1 không đáng kể so với m2.
Tuy nhiên, nếu bạn đang cố gắng hạ cánh xuống một tiểu hành tinh nhỏ, bạn có thể phải sử dụng công thức chung thêm lực đó vào vectơ tổng lực trong bước thứ hai.
BIÊN TẬP:
Theo yêu cầu một số gợi ý về việc thực hiện. Bạn sẽ cần:
Trước hết là thư viện vectơ: trò chơi của bạn có thể là đơn sắc / bi / cây / bốn ... tùy ý, theo như bạn coi trường hợp của bạn là hình chiếu của một từ 3D, các roules vật lý giữ.
Nếu n là thứ nguyên bạn chọn (có thể là 2 hoặc 3 trong trường hợp của bạn), thư viện phải có:
Bạn có thể sử dụng một thư viện thực hiện điều này hoặc tự mình thực hiện; một vectơ có thể là một cấu trúc hoặc một lớp, sự lựa chọn là của bạn.
Mỗi động cơ nên được mô tả bởi:
đầu vào người dùng của bạn sẽ được sử dụng để cung cấp cho mỗi động cơ một số sẽ nằm trong khoảng từ 0 (động cơ không sử dụng) đến 1 (toàn bộ công suất): hệ số động cơ (mức sử dụng).
Nhân hệ số động cơ cho vectơ lực đẩy của nó để có được sự tin tưởng thực sự của động cơ và tổng hợp tất cả các kết quả của tất cả các động cơ có sẵn; điều này sẽ cung cấp cho bạn F của bước thứ hai.
Hệ số động cơ của bạn có thể được sử dụng để biết mức sử dụng nhiên liệu thực tế cho từng động cơ: nhân hệ số động cơ với mức sử dụng nhiên liệu và dt để biết mức sử dụng nhiên liệu tức thời; bạn có thể trừ giá trị này từ tổng công suất nhiên liệu (điều này mang đến cho bạn cơ hội cập nhật tổng khối lượng m nếu khối lượng nhiên liệu đáng kể).
Bây giờ bạn có thể tiến hành sử dụng tích hợp để tính toán vị trí mới, kiểm tra sự va chạm với bề mặt hành tinh của bạn; nếu có, sử dụng chiều dài của vectơ vận tốc để nói nếu cuộc đổ bộ là thành công hay thảm họa.
Rõ ràng các kiểm tra va chạm khác có thể / nên được thực hiện, một số thực thể bề mặt không thể được phép làm điểm hạ cánh để mọi va chạm là một điểm nghiêm trọng.
Tôi để lại làm thế nào để có được đầu vào và làm thế nào để hiển thị tàu vũ trụ của bạn cho bạn; ví dụ, bạn có thể sử dụng hệ số động cơ để hiển thị khung trạng thái động cơ theo khung.
Vì câu trả lời xuất sắc khác có vẻ hơi lý thuyết, đây là phiên bản mã đơn giản:
// Position of the lander:
var positionX = 100.0;
var positionY = 100.0;
// Velocity of lander
var velocityX = 0.0;
var velocityY = 0.0;
// Acceleration due to gravity
var gravity = 1.0;
// If the player is pressing the thrust buttons
var isThrusting = false;
var isThrustingLeft = false;
var isThrustingRight = false;
// Thrust acceleration
var thrust = -2.0;
// Vertical position of the ground
var groundY = 200.0;
// Maximum landing velocity
var maxLandingVelocity = 3.00;
onUpdate()
{
velocityY += gravity;
positionX += velocityX;
positionY += velocityY;
if (isThrusting)
{
velocityY += thrust;
}
if (isThrustingLeft)
{
velocityX += thrust;
}
else if (isThrustingRight)
{
velocityX -= thrust;
}
if (positionY >= floorY)
{
if (velocityY > maxLandingVelocity)
{
// crashed!
}
else
{
// landed successfully!
}
}
}
Thật không may, toán học ở đây có lông. Câu trả lời của FxIII là tốt cho trường hợp chung của một vật thể rơi nhưng bạn đang nói về một tên lửa - và tên lửa đốt cháy nhiên liệu.
Tôi đã thấy mã làm điều đó nhưng nó hoàn toàn không có giấy tờ và tôi không bao giờ tìm ra toán học đằng sau nó. Trừ khi bạn bị giới hạn CPU bằng cách nào đó, tôi sẽ không làm phiền và chỉ đơn giản là dùng vũ lực - Cách tiếp cận FxIII được áp dụng trong khoảng thời gian khá ngắn và điều chỉnh lực đẩy (hoặc sử dụng nhiên liệu nếu bạn điều chỉnh lại tên lửa khi nhiên liệu bị đốt cháy để duy trì gia tốc quy định thay vì lực đẩy quy định) giữa mỗi lần lặp khi tên lửa đốt cháy nhiên liệu.