comments
This commit is contained in:
parent
dc66959b83
commit
05f9fcfd10
2 changed files with 23 additions and 17 deletions
|
@ -448,6 +448,7 @@ void Airplane::setupState(const float aoa, const float speed, const float gla, S
|
|||
s->orient[3] = 0; s->orient[4] = 1; s->orient[5] = 0;
|
||||
s->orient[6] = -sinAoA; s->orient[7] = 0; s->orient[8] = cosAoA;
|
||||
|
||||
//? what is gla? v[1]=y, v[2]=z? should sin go to v2 instead v1?
|
||||
s->v[0] = speed*Math::cos(gla); s->v[1] = -speed*Math::sin(gla); s->v[2] = 0;
|
||||
|
||||
int i;
|
||||
|
@ -976,6 +977,7 @@ void Airplane::runApproach()
|
|||
_model.calcForces(&_approachState);
|
||||
}
|
||||
|
||||
// used in the solve methods
|
||||
void Airplane::applyDragFactor(float factor)
|
||||
{
|
||||
float applied = Math::pow(factor, SOLVE_TWEAK);
|
||||
|
|
|
@ -249,6 +249,7 @@ void RigidBody::addForce(float* pos, float* force)
|
|||
addTorque(t);
|
||||
}
|
||||
|
||||
/// not used (?)
|
||||
void RigidBody::setBodySpin(float* rotation)
|
||||
{
|
||||
Math::set3(rotation, _spin);
|
||||
|
@ -259,33 +260,36 @@ void RigidBody::getCG(float* cgOut)
|
|||
Math::set3(_cg, cgOut);
|
||||
}
|
||||
|
||||
/// return acceleration at c.g.
|
||||
void RigidBody::getAccel(float* accelOut)
|
||||
{
|
||||
Math::mul3(1/_totalMass, _force, accelOut);
|
||||
}
|
||||
|
||||
/// return acceleration at pos (unused?)
|
||||
void RigidBody::getAccel(float* pos, float* accelOut)
|
||||
{
|
||||
getAccel(accelOut);
|
||||
|
||||
// Turn the "spin" vector into a normalized spin axis "a" and a
|
||||
// radians/sec scalar "rate".
|
||||
float a[3];
|
||||
// centripetal accelerations
|
||||
// Calculate normalized spin axis "a" and rate (radians/sec) from spin vector.
|
||||
float rate = Math::mag3(_spin);
|
||||
Math::set3(_spin, a);
|
||||
if (rate !=0 )
|
||||
Math::mul3(1/rate, a, a);
|
||||
//an else branch is not neccesary. a, which is a=(0,0,0) in the else case, is only used in a dot product
|
||||
float v[3];
|
||||
Math::sub3(_cg, pos, v); // v = cg - pos
|
||||
Math::mul3(Math::dot3(v, a), a, a); // a = a * (v dot a)
|
||||
Math::add3(v, a, v); // v = v + a
|
||||
if (rate != 0) {
|
||||
float a[3], v[3];
|
||||
Math::sub3(_cg, pos, v); // distance = cg - pos;
|
||||
if (v[0] == 0 && v[1] == 0 && v[2] == 0) // nothing to do
|
||||
return;
|
||||
Math::mul3(1/rate, _spin, a);
|
||||
// d_a = a * (distance dot a); (projection of distance vector on a, |a|=1)
|
||||
Math::mul3(Math::dot3(v, a), a, a);
|
||||
Math::add3(v, a, v); // v = distance + projection;
|
||||
|
||||
// Now v contains the vector from pos to the rotation axis.
|
||||
// Multiply by the square of the rotation rate to get the linear
|
||||
// acceleration.
|
||||
Math::mul3(rate*rate, v, v);
|
||||
Math::add3(v, accelOut, accelOut);
|
||||
// Now v contains the vector from pos to the rotation axis.
|
||||
// Multiply by the square of the rotation rate to get the linear
|
||||
// acceleration.
|
||||
// nothing to do in the next two lines, if rate == 0
|
||||
Math::mul3(rate*rate, v, v);
|
||||
Math::add3(v, accelOut, accelOut);
|
||||
}
|
||||
}
|
||||
|
||||
void RigidBody::getAngularAccel(float* accelOut)
|
||||
|
|
Loading…
Reference in a new issue