snazim sa spravit v opengl simulaciu 2 planet s rovnakou hmotnostou. kedze na seba posobia rovnakou silou, mali by v podstate okolo seba len kruzit. lenze nieco mi unika. (neskor by som chcel pridat dalsie objekty s roznymi hmotnostami, avsak na 2 rovnakych sa mi to celkom kontroluje, ci to robim spravne)
Mam strukturu popisujucu planetku
Kód: Vybrať všetko
struct Ball {
vec3 a;
float r;
float m;
vec3 v;
vec3 pos;
float color[3];
};
Kód: Vybrať všetko
vector<Ball> balls;
...
addBall() { ...
balls.push_back(b);
}
Kód: Vybrať všetko
for(int i = 0; i < balls.size(); i++)
{
Ball &p = balls[i];
p.a =vec3(0,0,0);
}Kód: Vybrať všetko
for(int i = 0; i < balls.size(); i++)
{
Ball &p = balls[i];
for(int j = 0; j < balls.size(); j++)
{
if(j == i) // we consider the 10000 as infinit (big mass) so this particles won't move
continue;
const Ball &p1 = balls[j];
float d = sqrt((p1.pos.x - p.pos.x)*(p1.pos.x - p.pos.x) + (p1.pos.z - p.pos.z)*(p1.pos.z - p.pos.z) + (p1.pos.y - p.pos.y)*(p1.pos.y - p.pos.y));
p.a.x += (p1.pos.x - p.pos.x)/d * ( p1.m / (d*d)); //xova zlozka * a
p.a.y += (p1.pos.y - p.pos.y)/d * ( p1.m / (d*d)); //yova zlozka * a
p.a.z += (p1.pos.z - p.pos.z)/d * ( p1.m / (d*d)); //zova zlozka * a
}
}
Kód: Vybrať všetko
for(int i = 0; i < balls.size(); i++)
{
Ball &p = balls[i];
p.v.x += p.a.x * 10;
p.v.y += p.a.y * 10;
p.v.z += p.a.z * 10;
p.pos.x += p.v.x;
p.pos.y += p.v.y;
p.pos.z += p.v.z;
}
Chyba je hlavne v mojej fyzike, a preto sa potrebujem o nej poradit
//autoeditácia príspevku (13 Jan 2013, 15:02)
momentalne sa to sprava takto