Simular la gravetat és el més difícil que he provat fins ara en aquest projecte. Tot el que intento falla de manera espectacular. Durant molt de temps vaig pensar que no ho aconseguiria.

L'equació

Des d'una perspectiva superficial, la gravetat sembla senzilla. És una fórmula bàsica que converteix la massa d'un cos i la teva distància d'ell en la teva acceleració gravitatòria.

Llei de la gravitació universal de Newton:: g = GM/r2
Fàcil.

Primers intents

Si hagués investigat amb més atenció, podria haver estat més fàcil Ni tan sols vaig trobar l'equació correcta al principi i vaig copiar molt de google sense entendre.

Em feia il·lusió veure planetes i llunes i sentir-me com un astronauta. Fins i tot vaig gravar la primera prova. A veure si notes l'error.

Tenies UNA feina.

És al revés. La terra s'allunya del sol com una bala. El sol també està massa afectat per la petita gravetat de la terra.

De mica en mica, s’omple la pica

Vaig fracassar molt més després d'això. La meva confusió només creixia i creixia. No sabia què estava fent. Vaig canviar el codi una vegada i una altra sense entendre-ho. No és estrany que no funcionés.

Això va continuar durant uns dies. Al final vaig frenar i vaig començar a entendre.

Diagrama de pissarra amb la fórmula de la gravetat de Newton i alguns planetes amb molts números i fletxes.
Les matemàtiques són difícils.

Després d'uns quants dies més, el càlcul de la gravetat va funcionar. Encara era tècnicament incorrecte, però funcionava prou bé com per ser interessant.

A vegades una gallina cega troba un gra

L'èxit semblava proper. Veure la lluna orbitar la terra va ser un moment enorme.

El final quan completa l'òrbita i torna al seu punt exacte d'origen és el meu preferit.

Quin alleujament. Malauradament això va ser sobretot sort. Vaig haver de configurar una massa incorrecta per a la terra per tal que funcionés així. Gairebé tot va funcionar, però només per coses així.

Ara estava fent servir l'equació de gravetat correcta. Però vaig haver de restar el resultat de 0 perquè funcionés. Ni idea de per què. Era una cosa que vaig provar, i va ajudar, així que el vaig guardar.

const acceleration = 0 - (
 (G * subject.mass) /
 (Math.pow(distance, 2))
)

El treball segons el jornal

Va arribar el moment de la veritat quan el vaig provar amb quatre llunes simultàniament. Estaven posicionats equidistants al voltant de la Terra amb velocitats iguals. En aquest vídeo només haurien de donar la volta a la terra.

Res del que passa en aquest vídeo és correcte.

La gravetat era al revés, i una vegada més, no tenia ni idea de per què. Molt desmoralitzant.

L'única cosa a fer era seguir endavant i intentar anar amb compte. El càlcul de la gravetat és només una petita part d'aquest projecte en realitat. El codi de geometria també és un coponent important. És important calcular angles i distàncies entre punts, afegir vectors, i calcular vectors a partir d'un angle i una magnitud. Molts crides a Math.atan2 per exemple.

El càlcul de la gravetat estava bé, així que sabia que el problema era a un altre lloc i vaig començar a investigar. Vaig sentir que estava aplicant la gravetat als planetes de manera incorrecta. I started to try to tighten up my understanding of the basic geometry of this imaginary universe I’d built.


   Diagrama de pissarra d'una quadrícula 2D amb dos punts sobre ella i un angle dibuixat entre ells.
   Al costat d'això, un parell de fletxes comparen la 'direcció actual' amb la 'direcció real'.
No entenia els radians fins ara.

Quan vaig entendre millor els conceptes bàsics, vaig escriure proves. Tantes proves… Coses bàsiques: per exemple posar dos punts al costat de l'altre i comprovar que les distàncies i els angles es calculen correctament. Vaig escriure desenes de proves com aquesta.

Vaig fer petits canvis al codi mentre escrivia les proves. Cap d'ells semblava important. Però d'alguna manera, les coses van començar a funcionar millor. I set the “four moons” test case back up, ready to be disappointed and feel stupid. Vaig tornar a executar el cas de prova "quatre llunes", disposat a sentir-me decebut i estúpid.

Déu meu.

Almost perfect! Això és prou bo per passar a un nou problema. It’s still a long way from perfect, but I haven’t seen any “backwards gravity” and to be honest, that’ll do. Encara està lluny de ser perfecte, però almenys la gravetat no està al revés ara.

L'òrbita de la Terra al voltant del Sol triga uns 10 dies més del que hauria. I l'òrbita de la Lluna al voltant de la Terra triga aproximadament la meitat del temps que hauria. Ni idea de per què. Però almenys està funcionant prou bé com per ser divertit ara!