ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца - МАЙ!
0 Пользователей и 2 Гостей просматривают эту тему.
//взятие корня у long longlong long sqrBig(long long A, int clear){long long B=A/2;int i=0;while( i < clear){ //temp=B; if((B*B)<A) { B=B+B/2; } else {B=B-B/2;} //B0=temp; i++;}return B;}//сама функция подсчета траекторииvoid Calc(double &X, double &Y,double &Xold, double &Yold,double &SpeedX,double &SpeedY){ //масса земли умноженная на гравитационную постоянную const long long Kearth =667384000000000; //для затирания следа сохраняю предыдущие координаты Xold =X; Yold =Y; long long Rx =X/0.031392; // 0.031392 - отношения маштабирования Земли (пиксели/км) long long Ry =Y/0.031392; long long absR = sqrBig(Rx*Rx+Ry*Ry); SpeedX+=(-Kearth)/(absR*absR*absR)*Rx*(TIMER/1000); SpeedY+=(-Kearth)/(absR*absR*absR)*Ry*(TIMER/1000); Rx+=SpeedX; Ry+=SpeedY; X=Rx*0.031392; Y=Ry*0.031392;}
#define EarthR 200 //радиус пикселях. реальный 6371 кмvoid Calc(double &X, double &Y,double &Xold, double &Yold,double &SpeedX,double &SpeedY /*double &OldSpeedX, double &OldSpeedY,unsigned int MASS*/){ const double Kearth =398600.448; //масса земли умноженная на гравитационную постоянную Xold = X; // сохранение старого положения для затирания метки спутника на экране Yold = Y; //OldSpeedX=SpeedX; //OldSpeedY=SpeedY; double Rx =X/0.031392; // получение из координат в окне в пикселях координат до планеты double Ry =Y/0.031392; double absR = pow((Rx*Rx+Ry*Ry),0.5); //получение модуля вектора SpeedX+=((-Kearth)/(absR*absR*absR))*Rx*TIMER; //скорость по Х увеличесвается за время TIMER => (-GM*r/r^3)*dt SpeedY+=((-Kearth)/(absR*absR*absR))*Ry*TIMER; Rx+=SpeedX*TIMER; // координата Х вектора R равна старой + скорость*dt Ry+=SpeedY*TIMER; // X =Rx*0.031392; //возврат в пиксельные координаты для прорисовки Y =Ry*0.031392;}
#define EarthR 150 // радиус земли на экране в пикселях. Можно менять связь с размерами в функции сохраниться#define TIME 10 //дельта времени для расчетовconst double RealKoef= (double)EarthR/6371; // коефициент маштабированнияconst double Kearth =398600.448; // км3/сек2. масса земли умноженная на гравитационную постоянную и разделенная на количество секунд в часеvoid Calc(double &X, double &Y,double &SpeedX,double &SpeedY){ double Rx =X/RealKoef; //км. координата Х вектора R double Ry =Y/RealKoef; //км. координата Y вектора R double absR = pow((X*X+Y*Y),0.5)/RealKoef; //км. модуль вектора R SpeedX+=(-Kearth/(absR*absR*absR))*TIME*Rx; //км/с. прирощение на дельту времени вектора скорости по координате X SpeedY+=(-Kearth/(absR*absR*absR))*TIME*Ry; //км/с. прирощение на дельту времени вектора скорости по координате Y Rx+=(SpeedX)*(TIME); //км. сумирование вектора радиуса с вектором скорости по координате Х Ry+=(SpeedY)*(TIME);//км. сумирование вектора радиуса с вектором скорости по координате Y X=Rx*RealKoef;//0.031392;//пиксели. возврат к пиксельным координатам Y=Ry*RealKoef;//пиксели}
только проблемка вот вышла, таки не элипс, а круг.
но как его учитывать конкретно для такого случая?
почему результату всех моих пересчетов функции это круги.