Respostas:
A maneira mais simples é a integração do Euler. Você deve armazenar o vetor de posição e o vetor de velocidade. Em cada quadro:
( x para escalares, X para vetores)
tenha certeza que dt é pequeno ...
| G | é de cerca de 9,8 m / s² para a Terra e cerca de 1,6 m / s² para a Lua
em geral, a força de atracção devida à interação gravital é:
Afeta cada corpo e aponta para o outro.
O escalar G é a constante gravitacional muito famosa , é cerca de 6,67e-011 N (m / Kg) ²
Como você está interessado em aceleração:
Você só precisa conhecer a massa (m2) e o raio (r) do planeta para calcular sua aceleração.
Normalmente, a aceleração que move o planeta em direção à sua nave espacial é insignificante, porque geralmente m1 é insignificante em comparação com m2.
No entanto, se você estiver tentando pousar em um pequeno asteróide, provavelmente precisará usar a fórmula geral que adiciona essa força ao vetor de força total na segunda etapa.
EDITAR:
Conforme necessário, algumas dicas sobre a implementação. Você precisará de:
Em primeiro lugar, a biblioteca de vetores: seu jogo pode ser mono / bi / árvore / quatro ... dimensionais, na medida em que você considera seu caso uma projeção de uma palavra 3D, os roules físicos são válidos.
Se n for a dimensão que você escolher (provavelmente 2 ou 3 no seu caso), a biblioteca deverá ter:
Você pode usar uma biblioteca que faz isso ou implementar uma sozinha; um vetor pode ser uma estrutura ou uma classe, a escolha é sua.
Cada mecanismo deve ser descrito por:
sua entrada do usuário será usada para fornecer a cada mecanismo um número que estará entre 0 (mecanismo não utilizado) e 1 (potência total): o fator do motor (uso).
Multiplique o fator de mecanismo para seu vetor de impulso para obter a confiança real do mecanismo e resumir todos os resultados de todos os mecanismos disponíveis; isso lhe dará o F do segundo passo.
O fator do seu motor pode ser usado para conhecer o uso real de combustível de cada motor: multiplique o fator do motor pelo uso de combustível e por dt para saber o uso instantâneo de combustível; você pode subtrair esse valor da variável capacidade total de combustível (isso oferece a oportunidade de atualizar sua massa total m, se a massa de combustível for considerável).
Agora você pode continuar usando a integração para calcular a nova posição, verifique a colisão com a superfície do seu planeta; se houver, use o comprimento do vetor de velocidade para dizer se o pouso foi um sucesso ou um desastre.
Obviamente, outras verificações de colisão podem / devem ser feitas, algumas entidades de superfície não podem ser permitidas como ponto de aterrissagem, de modo que toda colisão é fatal.
Deixo como obter informações e como tornar sua nave espacial para você; você pode usar o fator do mecanismo para renderizar o status do mecanismo quadro a quadro, por exemplo.
Como a outra excelente resposta parece um pouco teórica, aqui está a versão simples do código:
// 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!
}
}
}
Infelizmente, a matemática aqui fica peluda. A resposta de FxIII é boa para o caso geral de um objeto em queda, mas você está falando de um foguete - e os foguetes queimam combustível.
Eu vi o código que faz isso, mas era completamente indocumentado e nunca consegui descobrir a matemática por trás dele. A menos que você seja limitado pela CPU, de alguma maneira eu não incomodaria e simplesmente a forçaria a brutamontes - a abordagem FxIIIs é aplicada em uma escala de tempo bastante curta e ajusta o empuxo (ou uso de combustível se você perceber que o foguete acelera de volta enquanto o combustível queima para manter). a aceleração especificada em vez do impulso especificado) entre cada iteração, à medida que o foguete queima combustível.