Próbuję zbudować symulację układu słonecznego w opengl za pomocą C. Nie mogę wymyślić, jak napisać kod do obliczania kierunku siły wywieranej na planeta przez inną. To, co mam do tej pory:obliczyć kierunek siły przyciągania między planetami
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];
}
}
Obliczenie wielkości siły wygląda prawidłowo. Nie wiem o wektorze. 'return fx, fy, fz;' nie zadziała. 'attraction' zwraca float, a nie 3. Gdzie zdefiniowano' vecLength' i dlaczego definiujesz 'av' o długości 4 zamiast 3? –
Zmieniłem kod, ale problem nadal występuje. moja testowa planeta nie pojawia się na ekranie – user3476732
mój błąd może leżeć gdzie indziej, ale tylko nie jestem pewien co do moich obliczeń dla kierunku – user3476732