Pregunta:
¿Cómo puedo interpolar 2 órbitas?
Gabriel_ES
2017-12-13 02:49:00 UTC
view on stackexchange narkive permalink

Mi pregunta es muy similar a esta, aunque la respuesta no es la que estaba buscando. Básicamente, estoy trabajando en un juego espacial (KSP) y lo estoy haciendo multijugador. Los clientes envían un paquete con sus parámetros orbitales en un intervalo (30 milisegundos por defecto) pero entre esos paquetes quiero interpolar y dibujar una órbita entre esos 2 paquetes.

Para vectores normales o velocidad uso lineal interpolación:

  float estático privado Lerp (float v0, float v1, float t) {return (1 - t) * v0 + t * v1;}  

Pero no funciona bien cuando trabajo con órbitas

  var inclination = Lerp (inclinación, Target.inclination, lerpPercentage), var excentricity = Lerp (excentricity, Target.eccentricity, lerpPercentage) ), var semiMajorAxis = Lerp (semiMajorAxis, Target.semiMajorAxis, lerpPercentage), var LAN = Lerp (LAN, Target.LAN, lerpPercentage), var argumentOfPeriapsis = Lerp (argumentOfPeriapsis, Target.argumentOfPeriapsis, lerpEchomalyApcentage), var argumento , Target.meanAnomalyAtEpoch, lerpPercentage), var epoch = Lerp (epoch, Target.epoch, lerpPercentage),  

¿Qué función puedo usar para interpol ¿Se los comió?

¿Por qué no funciona bien? Pensé que la interpolación lineal estaría bien durante 30 ms. La Tierra solo se mueve unos 10 ^ {- 7} grados alrededor del sol en 30 ms.
Bueno, realmente depende, a veces puedes acelerar el tiempo y a veces los paquetes se pierden por lo que puede haber un retraso de 1 o 2 segundos. Entonces, ¿es correcto usar la interpolación lineal para las órbitas? Los veo nerviosos, pero tal vez sea por el juego y no por las matemáticas ...
Usaría una interpolación de splines cúbicos. Mucho mejor que lineal.
Si necesita más precisión, puede utilizar una aproximación de orden superior.
Solo curiosidad: ¿está fijo el objeto alrededor del cual orbitan? ¿Dibuja esta órbita después de recibir el segundo paquete? ¿Interpola la posición o los elementos orbitales mismos?
Conozco las posiciones de los planetas hasta cada milisegundo (hago que todos los jugadores tengan el mismo tiempo para que todas las posiciones de los planetas sean iguales para todos) e interpolo el paquete de la posición 1 en el pasado, así que una vez que tengo 2 paquetes, interpolar la posición entre el 1er y el segundo, una vez finalizada esa interpolación interpolo entre el segundo y el tercero, etc ...
One responder:
James K
2018-02-03 23:37:07 UTC
view on stackexchange narkive permalink

Hay varias opciones posibles:

No interpoles en absoluto. Simplemente asuma que el planeta permanece fijo hasta la próxima actualización. El planeta Tierra se mueve $ 10 ^ {- 7} $ grados en 30 milisegundos. En la inmensidad del espacio eso es un error de redondeo.

Dados dos objetos, su posición, velocidad y aceleración, y los valores de sus elementos keplerianos en los momentos t0 y t1, desea estimar su posición, velocidad y aceleración en cualquier momento intermedio.

Puede utilizar una interpolación lineal simple de su posición. Esto tiene la ventaja de ser muy rápido, pero asume una velocidad constante. En períodos de tiempo cortos, esta es una suposición razonable. Para la mayoría de los cuerpos en órbita, esta aproximación debería ser lo suficientemente precisa para diferencias en el tiempo de muchos minutos, ya que los cambios en la velocidad son relativamente pequeños.

Puede asumir una aceleración constante e interpolar usando la ecuación SUVAT. Esto funciona muy bien si los objetos no se mueven demasiado. Por ejemplo, puede modelar muy bien el vuelo de una bola en el campo gravitacional de la Tierra, dando una forma parabólica. Esto debería dar una aproximación bastante buena de la posición durante horas, o incluso días.

Puede interpolar los elementos orbitales, linealmente, y resolver la ecuación de Kepler para obtener la posición del cuerpo en un momento dado. Para la mayoría de los cuerpos, los elementos orbitales cambian solo lentamente con el tiempo (a excepción de la anomalía). Es decir, la forma de la órbita permanece casi igual, solo cambia la posición en la órbita. La aproximación de la órbita de un planeta mediante la interpolación de sus elementos debería dar una buena aproximación de varios cientos de años de tiempo orbital. Sin embargo, el proceso de resolución de la ecuación es lento.

Finalmente, puede integrar numéricamente el problema de n cuerpos para el sistema solar. Dependiendo del paso de tiempo que elija, esto puede ser exacto por un período de tiempo indefinido

Por lo tanto, estos se pueden resumir como:

  1. Posición constante
  2. Velocidad constante
  3. Aceleración constante
  4. Aceleración variable siguiendo una ley del cuadrado inverso.
  5. Campo graviacional de n cuerpos de aceleración variable.

Para un motor de juegos, la velocidad es buena. Si las brechas en el tiempo son del orden de milisegundos (de tiempo real), entonces simplemente no interpolar debería ser indetectable.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...