Control de nave espacial modular

8

Estoy desarrollando un juego basado en la física con naves espaciales.

Una nave espacial se construye a partir de círculos conectados por uniones. Algunos de los círculos tienen motores conectados.

Los motores pueden rotar alrededor del centro del círculo y crear empuje. Quiero poder mover la nave en una dirección o girar alrededor de un punto estableciendo la rotación y el empuje para cada uno de los motores de la nave.

¿Cómo puedo encontrar la rotación y el empuje necesarios para que cada motor logre esto?

ingrese la descripción de la imagen aquí

SSS
fuente
2
Relacionado: gamedev.stackexchange.com/questions/40615/…
MichaelHouse
1
No olvide mirar el control pid en.wikipedia.org/wiki/PID_controller, esto evita fluctuaciones innecesarias (inestabilidad temporal) u objetivos no naturales.
huseyin tugrul buyukisik

Respuestas:

6

Imaginemos la situación simple de un barco con un solo motor. Para mover la nave, simplemente apuntamos el propulsor lejos de la dirección que queremos ir, y empujamos hacia afuera. Eso nos empuja en la dirección que queremos ir. No es posible rotar una nave compuesta de un solo propulsor.

Vamos a escalar nuestro barco a tres motores para hacerlo más interesante:

ingrese la descripción de la imagen aquí

Si quisiéramos mover esta nave hacia arriba y hacia la izquierda, apuntaríamos todos nuestros propulsores en la dirección opuesta y dispararíamos:

ingrese la descripción de la imagen aquí

La misma solución que el propulsor único que se encarga del movimiento lineal.

Pero, ¿qué pasa si nos falta un propulsor? Tenemos una carga desigual?

ingrese la descripción de la imagen aquí

Seguir la misma estrategia hará que la nave gire. En muchas situaciones, esto será inevitable y, en algunos casos, preferible, ya que orientará la nave para un mejor uso de los propulsores disponibles.

Una estrategia para mitigar esto sería la igualación. Divide la nave en el eje del movimiento deseado:

ingrese la descripción de la imagen aquí

Luego asegúrese de que el lado derecho y el lado izquierdo sean iguales entre sí. Si no escalan la salida del propulsor hasta que lo hagan. Esto puede resultar fácilmente en que no se aplique empuje. Depende de usted decidir si desea expulsar en su lugar causando rotación u obligar al jugador a rediseñar su nave reorganizando sus propulsores.

¿Qué hay de la rotación?

Esta pregunta describe muy bien la idea.

ingrese la descripción de la imagen aquí

Tendrás que calcular el centro de masa . Luego calcule el par proporcionado por cada propulsor. Por suerte para ti, tus propulsores rotan, por lo que puedes rotarlos para proporcionar el par máximo. El par máximo vendrá desde un ángulo recto al brazo del momento. Aplicando la suma de los pares rotará el cuerpo alrededor del centro de masa. También puede elegir algún otro punto de rotación arbitrario como el puente de la nave.

Si desea asegurarse de que gira en su lugar , puede reducir el empuje de los propulsores que harán que su nave se mueva linealmente. Puede hacerlo sumando todos los propulsores que tienen un par positivo y todos aquellos con un par negativo, luego compare sus valores absolutos. El grupo con el valor absoluto más grande debe reducirse para que coincida con el valor absoluto del otro grupo.

También puede encontrar un recurso muy útil en Amit Patel .

ingrese la descripción de la imagen aquí

Ha hecho una serie de 4 partes en naves espaciales configurables aquí: parte 1 , parte 2 , parte 3 , parte 4

MichaelHouse
fuente
Hay otras soluciones (más elegantes) para esto. Pero idealmente, si el jugador crea buenos diseños, estas estrategias deberían funcionar. Esta respuesta solo se entiende como un punto de partida básico para este tipo de control. Hay mucho margen de mejora.
MichaelHouse
-5

Estoy resuelto eso con la búsqueda local. Está funcionando, pero el rendimiento es casi malo. Quizás sea mejor usar mecánica teórica pero no lo sé.

SSS
fuente
44
-1, esa es una respuesta muy vaga. ¿Puedes explicar más qué hiciste realmente para resolver el problema?
MichaelHouse