Advertisement
Guest User

Untitled

a guest
Aug 20th, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.24 KB | None | 0 0
  1.  
  2.  
  3. void __fastcall TVehicle::ProcessFrame()
  4. {
  5.  
  6.  
  7.  
  8. Gather_All_INFO();
  9.  
  10. AIRLIERON_LEFT->Frame_tick();
  11. AIRLIERON_RIGHT->Frame_tick();
  12. ELEVATOR_LEFT->Frame_tick();
  13. ELEVATOR_RIGHT->Frame_tick();
  14. RUDDER_LEFT->Frame_tick();
  15. RUDDER_RIGHT->Frame_tick();
  16.  
  17. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  18.     double l;
  19.             timin->stopTimer();
  20.  
  21. l = timin->getElapsedTime();
  22.  
  23. float dt = float(l);     //get elapsed time in seconds
  24. timin->startTimer();
  25. if (dt <=0 ) return;
  26.  
  27.  
  28. float kc = VectorLength(vel);
  29. float squareSpeed = kc*kc;
  30.  
  31. float elevationangle = ELEVATOR_LEFT->GetAngle(); //result is percentage of elevation //*17.5 is the max degree that elevator can reach
  32.  
  33.  
  34.  
  35. float elevator_drag_force = 0.90f *  ((dens * squareSpeed )/ 2.0f) * Abs(elevationangle) * 2.0f*13.2040f;
  36. float leverlen = 8.50f;
  37.  
  38.  
  39. float alphaangularity =  (dt*((leverlen * elevator_drag_force) * sin( (elevationangle*(17.50f+ 90.0f) )*imopi) ) )/ (mass * leverlen*leverlen);// elevator_drag_force*elevator_drag_force);
  40.  
  41. alphaangularity = RadToDeg(alphaangularity);
  42.  
  43.  
  44.  
  45. float angvel = alphaangularity*dt;
  46.     YPRangle.pitch(cos(angvel*imopi),sin(angvel*imopi));
  47.     YPRangle.DoRotation();
  48.     ANGLE_PITCH = ANGLE_PITCH + angvel;
  49.  
  50.  
  51. //    Callbackangvel  = angvel;
  52.    
  53. float Front_force = Throttle_to_force( Throttle );   //thrust force val
  54.  
  55. float Q = eGForce * mass;    // weight force val
  56.  
  57. ThrustForce_vec  = YPRangle.rf;                 //thrust force direction
  58. ThrustForce_vec = ThrustForce_vec * Front_force;
  59.  
  60. GForce_vec  = triplesingletoT3DPOINT(0.0,-1.0f,0.0f);
  61. GForce_vec      = GForce_vec * Q;            //weight force vector
  62. if (pos.y <= 0.0 ) GForce_vec = zero;      //:Y
  63.  
  64.  
  65.  
  66.  
  67. //                     Cl = 2 * pi * pitch angle (in radians)
  68. //                     L = .5 * Cl * air_density * V^2 * A
  69. //
  70. //  The angle between the chord line and the flight direction is called the angle of attack
  71. //so angle of attack is the angle between vel vector and thrust force vector.
  72. float AngleOfAttack =               AngleBetweenVectors(vel,ThrustForce_vec);
  73. float tmpangle = RadToDeg(AngleOfAttack);
  74.  
  75.  
  76. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  77. DragForce_vec = reverse_point(vel);
  78. DragForce_vec = Normalize( DragForce_vec );
  79. i_drag_force = DragForce_vec;
  80. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  81.  
  82.  
  83. DragForce_vec = DragForce_vec * (0.080f * ((dens * squareSpeed)/2.0f) * absnf(cos(tmpangle*imopi))*3.6f);
  84.  
  85. i_drag_force = i_drag_force * (1.180f*((dens * squareSpeed)/2.0f)*   absnf(sin(tmpangle*imopi))*14.0f);
  86.  
  87. DragForce_vec = DragForce_vec + i_drag_force;
  88.  
  89. //The lift derived from the aerofoil increases as  increases. Surprisingly, the lift increases linearly
  90. //with  up to about 10–15 . For many aerofoils, even with an angle of attack of 0  the aerofoil
  91. //generates some positive lift force. The lift generated by an aerofoil is given by the well-known
  92. //equation:
  93. //lift                              d
  94.  
  95. //Although lift cannot be measured directly in flight, in steady-state conditions, with an aircraft
  96. //flying straight-and-level, the lift must be equal to the mass of the aircraft, giving
  97. //mg = 1/2ρV 2sCL
  98. //CL = 2mg
  99. //ρsV 2
  100.  
  101. LiftCoeff = 0.0050f + sin(AngleOfAttack) / 2.0f;
  102. float LiftForce = 0.50f * LiftCoeff * dens * squareSpeed * 38.0f;// <--- LIFT AREA
  103.  
  104. LiftForce_vec.x = YPRangle.AIR_MATRIX[4];
  105. LiftForce_vec.y = YPRangle.AIR_MATRIX[5];
  106. LiftForce_vec.z = YPRangle.AIR_MATRIX[6];
  107.  
  108.         LiftForce_vec = LiftForce_vec * LiftForce;
  109.  
  110.  
  111. result_force = GForce_vec + ThrustForce_vec + DragForce_vec + LiftForce_vec;
  112.  
  113.  
  114. Acceleration = result_force / mass;
  115.  
  116.  
  117.  
  118.  
  119. t3dpoint V0;
  120. t3dpoint deltaV;
  121. V0 = vel;
  122.  
  123.  
  124. pos = pos + (vel * dt);
  125. vel = vel + (Acceleration * dt);
  126.  
  127.  
  128. if (dt == 0.0) V = 0; else
  129. V = n3ddistance(pos,old) / dt;
  130. V = 1.943844490f    * V;
  131.  
  132.  
  133.                                             old = pos;
  134.  
  135.  
  136. CAMERA->object_pos      = pos;
  137. CAMERA->object_dir      = YPRangle.rf;
  138. CAMERA->object_right    = YPRangle.rr;
  139. CAMERA->object_up       = YPRangle.ru;
  140.  
  141.  
  142. if (CAMERA->view_mode == 3) {
  143. CAMERA->object_dir  = triplesingletoT3DPOINT(YPRangle.AIR_MATRIX[8], YPRangle.AIR_MATRIX[9],
  144. YPRangle.AIR_MATRIX[10]);
  145.  
  146. CAMERA->object_right  = triplesingletoT3DPOINT(YPRangle.AIR_MATRIX[0], YPRangle.AIR_MATRIX[1],
  147. YPRangle.AIR_MATRIX[2]);
  148.  
  149. CAMERA->object_up = triplesingletoT3DPOINT(YPRangle.AIR_MATRIX[4], YPRangle.AIR_MATRIX[5],
  150. YPRangle.AIR_MATRIX[6]);
  151.  
  152. }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement