• Create Account

how to implement Intertia

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

3 replies to this topic

#1WiredCat  Crossbones+   -  Reputation: 1288

Like
0Likes
Like

Posted 23 May 2013 - 01:43 PM

So i have a jet.

I make a force that moves it. but when i set it to 0 (this force) the jet stops, but it shouldn't, it should at least move with this force(because i didn't include drag force )

but i have no idea how to implement intertia there.

lets assume i got drag force (lets call it drag_force)

all forces are vectors with length of acting force and its direction in my case ;]

if this helps you here is the code



void __fastcall TVehicle::ProcessFrame()
{

Gather_All_INFO();

AIRLIERON_LEFT->Frame_tick();
AIRLIERON_RIGHT->Frame_tick();
ELEVATOR_LEFT->Frame_tick();
ELEVATOR_RIGHT->Frame_tick();
RUDDER_LEFT->Frame_tick();
RUDDER_RIGHT->Frame_tick();

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double l;
timin->stopTimer();

l = timin->getElapsedTime();

float dt = float(l);
timin->startTimer();

if (dt <=0 ) return;

float Front_force = Throttle_to_force( Throttle );   //thrust force val

float Q = eGForce * mass;    // gravity force val

ThrustForce_vec  = YPRangle.rf;                 //thrust force direction

pos_from_plane_to_planet_center = vectorAB(pos, zero);

GForce_vec  = Normalize( pos_from_plane_to_planet_center ); //g force direction

GForce_vec 		= vector_multiple(GForce_vec, Q);
ThrustForce_vec = vector_multiple(ThrustForce_vec, Front_force);

//divide vector by float
Acceleration = result_force / mass;      // a = F / m

dk = ( dt*dt );

accvel = Normalize( Acceleration );

Translation = vector_multiple(Acceleration, dk);
Translation = vector_multiple(Translation, 0.50f); //(a * t^2 )/ 2
s = V * dt;
accvel = vector_multiple(accvel, s);         //  V0 * t   => convert it to vector
Translation = vectors_add(Translation, accvel);   //add vectors v0t + (at^2)/2   => s= v0t + at^2 / 2
t3dpoint rp = vectors_add(pos, Translation );      //move to new position
if ( rp.y < 0 ) rp.y = 0.0f;
pos = rp;
// v = s / t
V = n3ddistance(pos,old) / dt;  // s = V * t 						v=s/t

old = pos;  //save position

}



as you can see i use result_force

this need to be changed to intertia but how? ;x

like always i attach a video

by the way i have problems with calculation velocity properly but as soon i will deal with this problem and add some things i will make a new post ;P

Edited by ___, 23 May 2013 - 01:55 PM.

#2Álvaro  Crossbones+   -  Reputation: 19984

Like
3Likes
Like

Posted 23 May 2013 - 01:48 PM

acceleration = force/mass;
velocity = velocity + acceleration * dt;
position = position + velocity * dt;


#3WiredCat  Crossbones+   -  Reputation: 1288

Like
0Likes
Like

Posted 23 May 2013 - 04:28 PM

thanks, that should do the trick, i will give a reply if i made it work.

#4WiredCat  Crossbones+   -  Reputation: 1288

Like
0Likes
Like

Posted 24 May 2013 - 09:54 AM

It works, thank you very much

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

PARTNERS