Beispiel #1
0
void potoc_salleter::position()
{

    t=QDateTime::currentDateTime().toTime_t(); // время в UTC
    M=n*(t-t0); //получение M(средняя аномалия)

    //нужен модуль(функция) для учета изменния
    //долготы восходящего угла

    E=Ek(M);//получение E-эксцентрическая аномалия (методом приближения)
    r=a*(1-(e*E));//радиус
    oe=a*(cos(E)-e); // вспомогательная орбитальная координата oe
    on=a*(sqrt(1-(e*e))*sin(E)); //вспомогательная орбитальная координата on
    x=(Px*oe)+(Qx*on); // x - в геоцентрической системе корординат
    y=(Py*oe)+(Qy*on);//y- в геоцентрической системе координат
    z=(Pz*oe)+(Qz*on); // z - в геоцентрической системе координат
    if (qdebag)
    {
        qDebug()<<x<<"x-в геоцентрической системе корординат";
        qDebug()<<y<<"y-в геоцентрической системе координат";
        qDebug()<<z<<"z-в геоцентрической системе координат";
    }

    //вычесление скоростей
    v=atan(2*sqrt(1-e/1+e)*tan(E/2)); // истенная аномали
    p=a*(1-pow(e,2)); // параметр орбиыты
    V=sqrt((E_n)*((2/r)-(1/a))); // скорость
    vr=sqrt(E_n/p)*e*sin(v);//радиальная скорость
    vn=sqrt(E_n/p)*(1+e*cos(v));//трансверная скорость
    vx=x/r*vr+Qx*vn;// скорость по x
    vy=y/r*vr+Qy*vn;// скорость по y
    vz=z/r*vr+Qz*vn;// скорость по z
    if (pow(V,2)!=(vx*vx+vy*vy+vz*vz)) // проверка на правельность вычислений
    {
        emit speed_error();
    }

    if (qdebag)
    {
        qDebug()<<vx<<"vx-скорость по x";
        qDebug()<<vy<<"vy-скорость по y";
        qDebug()<<vz<<"vz-скорость по z";
        qDebug()<<V<<"v-скорость";
  }


    salleter= vector.et(x,y,z,vx,vy,vz); // получение еденичного вектора
    emit  data(salleter,t,name); // отправляет сигнал что данные обновились

}
Beispiel #2
0
void Planet::energy(double EP,int i){
    Ep(i) = EP;
    Ek(i) = (Vx(i)*Vx(i) + Vy(i)*Vy(i)) * 0.5 * mass;
}