Sto provando a costruire una simulazione di un sistema solare in opengl usando C. Non riesco a capire come scrivere il codice per calcolare la direzione della forza esercitata su un pianeta da un altro. Questo quello che ho finora:calcolare la direzione della forza di attrazione tra i pianeti
void attraction(planet self, planet other, float *direction)
{
float d = vecDistance(self.p, other.p);
//calc the force of attraction
float f = G * ((self.mass * other.mass)/(pow(d, 2)));
//calc the direction of the force
float vectorDist[3];
vecSub(self.p, other.p, vectorDist);
direction[0] = f*vectorDist[0]/d;
direction[1] = f*vectorDist[1]/d;
direction[2] = f*vectorDist[2]/d;
}
float vecDistance(float *pV1, float *pV2)
{
float fLen=0.0f;
if(pV1 && pV2)
{
float av[3];
vecSub(pV2, pV1, av);
fLen=vecLength(av);
}
return fLen;
}
void vecSub(float *pV0, float *pV1, float *pVRes)
{
if(pV0 && pV1 && pVRes)
{
pVRes[0]=pV0[0]-pV1[0];
pVRes[1]=pV0[1]-pV1[1];
pVRes[2]=pV0[2]-pV1[2];
}
}
Il calcolo della grandezza della forza sembra corretto. Non so del vettore. 'return fx, fy, fz;' non funzionerà. 'attraction' restituisce un float, non 3. Dove è definito' vecLength' e perché stai definendo 'av' con una lunghezza di 4 invece di 3? –
ho modificato il mio codice ma il problema persiste ancora. il mio pianeta test non appare sullo schermo – user3476732
il mio errore potrebbe trovarsi altrove, ma non sono sicuro del mio calcolo per la direzione – user3476732