Esempio n. 1
0
    public void FlightModel(double dt)
    {
        force.SetVec(0.0D, 0.0D, 0.0D);
        torque.SetVec(0.0D, 0.0D, 0.0D);

        interference.Calc_interference(this, dt);

        t_force.SetVec(0.0D, 0.0D, 0.0D);
        t_torque.SetVec(0.0D, 0.0D, 0.0D);

        a_force.SetVec(0.0D, 0.0D, 0.0D);
        a_torque.SetVec(0.0D, 0.0D, 0.0D);

        f_force.SetVec(0.0D, 0.0D, 0.0D);
        f_torque.SetVec(0.0D, 0.0D, 0.0D);

        n_force.SetVec(0.0D, 0.0D, 0.0D);
        n_torque.SetVec(0.0D, 0.0D, 0.0D);

        ControlLink(dt);

        int i;

        for (i = 0; i < n_powerPlant; i++)
        {
            powerPlant[i].Calc_dynamics(this, dt);
            t_force  = t_force.Add(powerPlant[i].engine.GetForce());
            t_torque = t_torque.Add(powerPlant[i].engine.GetTorque());
        }

        for (i = 0; i < n_fuselage; i++)
        {
            for (int lr = 0; lr <= 1; lr++)
            {
                fuslage[i, lr].Calc_dynamics(lr, this, interference.fuselage_dv[i, lr]);
                a_force  = a_force.Add(fuslage[i, lr].fv);
                a_torque = a_torque.Add(fuslage[i, lr].tv);
            }
        }

        for (i = 0; i < n_canard; i++)
        {
            canard[i].Calc_dynamics(this, ZERO_VECTOR_PAIR, ONE_PAIR, ONE_PAIR);
            a_force  = a_force.Add(canard[i].fv);
            a_torque = a_torque.Add(canard[i].tv);
        }

        for (i = 0; i < n_canard_elevator; i++)
        {
            for (int lr_0 = 0; lr_0 <= 1; lr_0++)
            {
                canard_elevator[i, lr_0].Calc_dynamics(lr_0, this, ZERO_VECTOR, 1.0D, 1.0D);
                a_force  = a_force.Add(canard_elevator[i, lr_0].d_fv);
                a_torque = a_torque.Add(canard_elevator[i, lr_0].d_tv);
            }
        }

        for (i = 0; i < n_wing; i++)
        {
            wing[i].Calc_dynamics(this, ZERO_VECTOR_PAIR, ONE_PAIR, ONE_PAIR);
            a_force  = a_force.Add(wing[i].fv);
            a_torque = a_torque.Add(wing[i].tv);
        }

        for (i = 0; i < n_aileron; i++)
        {
            for (int lr_1 = 0; lr_1 <= 1; lr_1++)
            {
                aileron[i, lr_1].Calc_dynamics(lr_1, this, ZERO_VECTOR, 1.0D, 1.0D);
                a_force  = a_force.Add(aileron[i, lr_1].d_fv);
                a_torque = a_torque.Add(aileron[i, lr_1].d_tv);
            }
        }

        for (i = 0; i < n_l_flap; i++)
        {
            for (int lr_2 = 0; lr_2 <= 1; lr_2++)
            {
                l_flap[i, lr_2].Calc_dynamics(lr_2, this, ZERO_VECTOR, 1.0D, 1.0D);
                a_force  = a_force.Add(l_flap[i, lr_2].d_fv);
                a_torque = a_torque.Add(l_flap[i, lr_2].d_tv);
            }
        }

        for (i = 0; i < n_t_flap; i++)
        {
            for (int lr_3 = 0; lr_3 <= 1; lr_3++)
            {
                t_flap[i, lr_3].Calc_dynamics(lr_3, this, ZERO_VECTOR, 1.0D, 1.0D);
                a_force  = a_force.Add(t_flap[i, lr_3].d_fv);
                a_torque = a_torque.Add(t_flap[i, lr_3].d_tv);
            }
        }

        for (i = 0; i < n_htail; i++)
        {
            htail[i].Calc_dynamics(this, interference.htail_dv,
                                   interference.htail_k_q, ONE_PAIR);
            a_force  = a_force.Add(htail[i].fv);
            a_torque = a_torque.Add(htail[i].tv);
        }

        for (i = 0; i < n_elevator; i++)
        {
            for (int lr_4 = 0; lr_4 <= 1; lr_4++)
            {
                elevator[i, lr_4].Calc_dynamics(lr_4, this, interference.htail_dv[lr_4], interference.htail_k_q[lr_4], 1.0D);
                a_force  = a_force.Add(elevator[i, lr_4].d_fv);
                a_torque = a_torque.Add(elevator[i, lr_4].d_tv);
            }
        }

        for (i = 0; i < n_vtail; i++)
        {
            vtail[i].Calc_dynamics(this, interference.vtail_dv,
                                   interference.vtail_k_q, interference.vtail_k_S);
            a_force  = a_force.Add(vtail[i].fv);
            a_torque = a_torque.Add(vtail[i].tv);
        }

        for (i = 0; i < n_rudder; i++)
        {
            for (int lr_5 = 0; lr_5 <= 1; lr_5++)
            {
                rudder[i, lr_5].Calc_dynamics(lr_5, this, interference.vtail_dv[lr_5], interference.vtail_k_q[lr_5], interference.vtail_k_S[lr_5]);
                a_force  = a_force.Add(rudder[i, lr_5].d_fv);
                a_torque = a_torque.Add(rudder[i, lr_5].d_tv);
            }
        }

        for (i = 0; i < n_fin; i++)
        {
            fin[i].Calc_dynamics(this, ZERO_VECTOR_PAIR, ONE_PAIR, ONE_PAIR);
            a_force  = a_force.Add(fin[i].fv);
            a_torque = a_torque.Add(fin[i].tv);
        }

        max_k_stall_wing = Get_max_k_stall_wing();

        max_k_stall_htail = Get_max_k_stall_htail();

        flag_landing_gear = 1;
        flag_land         = 1;
        for (i = 0; i < n_LandingGear; i++)
        {
            for (int lr_6 = 0; lr_6 <= 1; lr_6++)
            {
                if (landing_gear[i, lr_6].flag != 0)
                {
                    landing_gear[i, lr_6].Set_landling_gear_delta(lr_6,
                                                                  cif, dt);
                    landing_gear[i, lr_6].Calc_dynamics(lr_6, this, dt);
                    n_force  = n_force.Add(landing_gear[i, lr_6].n_fv);
                    n_torque = n_torque.Add(landing_gear[i, lr_6].n_tv);
                    f_force  = f_force.Add(landing_gear[i, lr_6].f_fv);
                    f_torque = f_torque.Add(landing_gear[i, lr_6].f_tv);
                    a_force  = a_force.Add(landing_gear[i, lr_6].a_fv);
                    a_torque = a_torque.Add(landing_gear[i, lr_6].a_tv);
                    if (landing_gear[i, lr_6].delta != 1.0D)
                    {
                        flag_landing_gear = 0;
                    }
                    if (landing_gear[i, lr_6].flag_land != 1)
                    {
                        flag_land = 0;
                    }
                }
            }
        }

        force  = force.Add(t_force);
        torque = torque.Add(t_torque);

        force  = force.Add(n_force);
        torque = torque.Add(n_torque);

        if (pMotion.vc.Length() >= 0.1D)
        {
            force  = force.Add(a_force);
            torque = torque.Add(a_torque);
            force  = force.Add(f_force);
            torque = torque.Add(f_torque);
        }
        else if (cif.throttle_pos > 0.0D)
        {
            force  = force.Add(a_force);
            torque = torque.Add(a_torque);
        }
        else if (flag_land == 1)
        {
            pMotion.vc.SetVec(0.0D, 0.0D, 0.0D);
            pMotion.omega.SetVec(0.0D, 0.0D, 0.0D);
        }
    }