Dirk Gregorius said:
This is used commonly in physics engines https://www.cs.cmu.edu/~spiff/moedit99/expmap.pdf
Given that the idea of raising a scalar base to a non-scalar power is at best tenuously intuitive, why do we use the term exponential map? Historically, the formulation of the map as an infinite series has the same form as the series expansion of the exponential ex for real numbers x, and thus the mathematical community has adopted the name exponential for the map.
I guess this answers my long standing question of why i have to use pow(x,2) to double the angle of a complex number.
Unfortunately i do not really understand the answer. \:D/
Nagle said:
One of those standard questions, and I've solved this before, but can't find the answer right now.
I have this tooling function in my code, if it helps:
inline sQuat IntegrateAngVel (const sQuat &orn, const sVec3 &angVel, const float timestep)
{
float sql = angVel.SqL(); // squared magnitude
if (sql > FP_EPSILON2)
{
float invOmegaMag = 1.0f / sqrt(sql);
sVec3 omegaAxis (angVel * invOmegaMag);
float omegaAngle = invOmegaMag * sql * timestep;
sQuat rotation; rotation.FromAxisAndAngle (omegaAxis, omegaAngle);
sQuat newOrn = rotation * orn;
newOrn.Normalize ();
return newOrn;
}
return orn;
}
But this sure can be optimized, and more important: There should be a way to integrate tiny velocity as well, at least using some approximation.
So my code is not good for something serious.
Edit:
There should be a way to integrate tiny velocity as well, at least using some approximation.
Continuing with the paper, it has explained just that next.
I now remember to have seen this in code in the Bullet engine.