# Rotating Sphere with Euler integration

This topic is 1801 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi everyone. I'm doing my class project and i'm having troubles with Euler integration (witch seems to be the basic)...
The main loop:

torque = position.cross(force);

momentum += dt * force;
//velocity = momentum * (1.0f / mass);

position += velocity * dt;

ang_momentum += torque * dt;
m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);
ang_vel = multvm(ang_momentum, m_inertia_inverse); //multiplies a vector by a matrix

orientation += (Quaternion(0, ang_vel.x, ang_vel.y, ang_vel.z) * orientation) * (0.5f * dt);
orientation.normalize();

"g_inertia" is the following matrix3

Ix = Iy = Iz = 0.4f * mass * Mathematics::sqrt(radius);

inertia.m11 = Ix;            inertia.m12 = 0;        inertia.m13 = 0;
inertia.m21 = 0;            inertia.m22 = Iy;        inertia.m23 = 0;

inertia.m31 = 0;            inertia.m32 = 0;        inertia.m33 = Iz;

and i'm rotating like this:

orientation.angleAxis(angle, axis); //quaternion to angle axis

glTranslatef(position.x, position.y, position.z);
glRotatef( angle / Mathematics::pi * 180.0f, axis.x, axis.y, axis.z );

The code is right?

Seems like i'm having trouble with the numbers. They out of range... especially with the angular velocity!

Edited by irlanrobson

##### Share on other sites

someone have a similar code ???

##### Share on other sites

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);

Would this work?

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia.Inverse() * MakeMatrixFromQuaternion(orientation);

##### Share on other sites

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);

Would this work?

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia.Inverse() * MakeMatrixFromQuaternion(orientation);

thanks but i've already done this in the constructor

##### Share on other sites

torque = position.cross(force);

r           =  some point on sphere  -  sphere position;

torque  =  r.cross( force );

##### Share on other sites

torque = position.cross(force);

r           =  some point on sphere  -  sphere position;

torque  =  r.cross( force );

thanks but the only force that actually i have, is the gravity force that is on the constructor ,,,