#ifndef PLANETYH #define PLANETYH // Vlastni planeta struct telo { long double x,y,z,vx,vy,vz,ax,ay,az,m; long double px,py,pz; }; long double h=6.7*pow(10,-11),d; // Kosmologicka konstanta a delta v sekundach int MAX; // Pocet planet int sel=-1; // Index vybrane planety pro relativni souradnice #define VZDALENOST(TELA, I, J) \ sqrt(((TELA[I].x-TELA[J].x)*(TELA[I].x-TELA[J].x)+(TELA[I].y-TELA[J].y)*(TELA[I].y-TELA[J].y)+(TELA[I].z-TELA[J].z)*(TELA[I].z-TELA[J].z))); void spocti(struct telo *tela) { int i=0,j=0; long double px,py,pz,vz; // Tady nastavim posledni pozici, abych mohl vykreslit carku od minuleho intervalu if(sel!=-1) for(i=0;i<=MAX;i++) { tela[i].px=tela[i].x-tela[sel].x; tela[i].py=tela[i].y-tela[sel].y; tela[i].pz=tela[i].z-tela[sel].z; } else for(i=0;i<=MAX;i++) { tela[i].px=tela[i].x; tela[i].py=tela[i].y; tela[i].pz=tela[i].z; } // Pocitame akceleraci for(i=0;i<=MAX;i++) { px=py=pz=0; for(j=0;j<=MAX;j++) { if(j==i) continue; vz=VZDALENOST(tela,i,j); px+=-h*tela[j].m*(tela[i].x-tela[j].x)/(vz*vz*vz); py+=-h*tela[j].m*(tela[i].y-tela[j].y)/(vz*vz*vz); pz+=-h*tela[j].m*(tela[i].z-tela[j].z)/(vz*vz*vz); } tela[i].ax=px; tela[i].ay=py; tela[i].az=pz; } // A ted pozici a rychlost v novem okamziku for(i=0;i<=MAX;i++) { tela[i].vx=tela[i].vx+tela[i].ax*d; tela[i].vy=tela[i].vy+tela[i].ay*d; tela[i].vz=tela[i].vz+tela[i].az*d; tela[i].x=tela[i].x+tela[i].vx*d; tela[i].y=tela[i].y+tela[i].vy*d; tela[i].z=tela[i].z+tela[i].vz*d; } // A to je vse, panove... } #endif