Vamos imaginar a situação simples de um navio com apenas um motor. Para mover o navio, simplesmente apontamos o propulsor para longe da direção que queremos seguir e empurramos para fora. Isso nos empurra na direção que queremos seguir. Não é possível girar um navio composto por apenas um propulsor.
Vamos escalar nosso navio para três motores para torná-lo mais interessante:
Se quiséssemos mover este navio para algum lugar acima e para a esquerda, apenas apontaríamos todos os nossos propulsores na direção oposta e dispararíamos:
A mesma solução que o propulsor único que cuida do movimento linear.
Mas e se estivermos perdendo um propulsor? Temos uma carga desigual?
Seguir a mesma estratégia fará com que o navio gire. Em muitas situações, isso será inevitável e, em alguns casos, preferível, pois orientará o navio para um melhor uso dos propulsores disponíveis.
Uma estratégia para mitigar isso seria a equalização. Divida o navio no eixo do movimento desejado:
Depois, verifique se o lado direito e o lado esquerdo são iguais. Se eles não escalarem a saída do propulsor até que o façam. Isso pode facilmente resultar em nenhum impulso sendo aplicado. Cabe a você decidir se, em vez disso, deseja empurrar causando rotação ou forçar o jogador a redesenhar sua nave reorganizando seus propulsores.
E a rotação?
Esta pergunta descreve muito bem a ideia.
Você precisará calcular o centro de massa . Em seguida, calcule o torque fornecido por cada propulsor. Para sua sorte, seus propulsores giram, para que você possa girá-los para fornecer o torque máximo. O torque máximo virá de um ângulo reto para o braço do momento. A aplicação da soma dos torques fará com que o corpo gire em torno do centro de massa. Você também pode escolher outro ponto de rotação arbitrário, como a ponte do navio.
Se você quiser garantir que você gire no lugar, pode reduzir o impulso dos propulsores que farão com que o seu navio se mova linearmente. Você pode fazer isso somando todos os propulsores que possuem torque positivo e todos aqueles com torque negativo; em seguida, compare seus valores absolutos. O grupo com o valor absoluto maior deve ser redimensionado para corresponder ao valor absoluto do outro grupo.
Você também pode encontrar um recurso muito útil em Amit Patel .
Ele fez uma série de 4 partes em naves espaciais configuráveis aqui: parte 1 , parte 2 , parte 3 , parte 4