Estoy tratando de crear un sencillo programa que simula la gravedad. La idea es que tengo un sol central y varios planetas que puedo crear con un gesto en la pantalla, y yo uso la inicial de barrido para proporcionar a los planetas con una velocidad inicial.
Después de algún tiempo el planeta finalmente se empiezan a moverse alrededor del sol según la ley de Newton.
Mi enfoque actual es: En cualquier momento puedo calcular el valor de la fuerza gravitacional que el sol ejerce sobre el planeta ($Mp$ es la masa del planeta y $Ms$ es la masa del sol):
$$F = G \frac{Mp Ms}{r^2}$$
Y luego encontrar el valor de aceleración para el planeta con
$$A = \frac{F}{Mp}$$
Entonces puedo encontrar el ángulo, $\theta$, de la línea que une el centro del planeta con el centro del sol.
A continuación, crear un vector de aceleración a lo largo de esa línea por la creación de su x y una componente y:
$$\begin{align} Ax &= A\cos\theta & Ay &= A\sin\theta \end{align}$$
En la siguiente iteración puedo utilizar este vector de aceleración y el tiempo transcurrido desde la iteración anterior para calcular el planeta de la velocidad y su posición. Entonces todo se repite.
El principal problema con este enfoque es que tan pronto como el planeta alcanza una distancia de cerca de cero desde el sol, se pone una tremenda aceleración y en la siguiente iteración es simplemente demasiado lejos del sol y mantiene en movimiento a lo largo de una línea recta, a la derecha de la pantalla, que por supuesto no es lo que yo esperaría de la gravedad. Tenga en cuenta que todavía no tengo la detección de colisiones para lo que yo esperaría que sería el planeta permanezca tipo de todavía en el centro del sol.
Mi intuición es, gritando que yo debería usar algún tipo de integración de la aceleración para cada aceleración, que me pierdo entre una iteración y la siguiente sería tomado en cuenta y a mi planeta dejaría escapar de la gravedad, así que me he recuperado mis matemáticas y física de los libros y trató de averiguar esto por mí mismo, pero no hubo suerte.
Si tengo este derecho, el problema es que la aceleración es una función de la distancia, así que no se puede integrar en el fin de obtener la posición para el planeta, porque eso requeriría una aceleración como función del tiempo. Estoy en lo cierto? ¿Cuál es la solución adecuada a este?