Example inertia tensor:

0.00076275 -0.00047298 0

-0.00047298 0.0019185 0

0 0 0.0022293

btMatrix3x3 inertia(0.00076275, -0.00047298, 0, -0.00047298, 0.0019185, 0, 0, 0, 0.0022293);

btQuaternion q = btQuaternion::getIdentity();

inertia.extractRotation(q);

The omega computed in extractRotation is 0 on the very first iteration of the loop resulting in exiting. This basically just returns your identity quaternion.... This function has been in bullet for a long time I'm hoping I'm just doing something wrong but...

Omega computes the sum of cross product of the columns of the identity q and the inertia tensor. This result in 0,0,0 since you get 0,0,-0.4730

+ 0,0,0.4730 and 0,0,0

Running eig to do vd decomp in matlab reveals correct rotation and principle axis.

## Is diagonlize/extractRotation broken, i.e., does nothing? see 3 lines of example code and try yourself

- drleviathan
**Posts:**554**Joined:**Tue Sep 30, 2014 6:03 pm**Location:**San Francisco

### Re: Is diagonlize/extractRotation broken, i.e., does nothing? see 3 lines of example code and try yourself

You can't extract a valid rotation from a non-orthonormal 3x3 matrix.

Inertia tensors are 3x3 matrices but are not orthonormal in general.

What do you really want to do? Why would you be trying to extract a rotation from an inertia tensor? Are you trying to compute the rotation that would diagonalize the matrix?

Inertia tensors are 3x3 matrices but are not orthonormal in general.

What do you really want to do? Why would you be trying to extract a rotation from an inertia tensor? Are you trying to compute the rotation that would diagonalize the matrix?

- Erwin Coumans
- Site Admin
**Posts:**4193**Joined:**Sun Jun 26, 2005 6:43 pm**Location:**California, USA-
**Contact:**

### Re: Is diagonlize/extractRotation broken, i.e., does nothing? see 3 lines of example code and try yourself

The original btMatrix3x3::diagonalize method should work for symmetric matrices. Recently (2017) I replaced it with a diagonalize method based on the "A Robust Method to Extract the Rotational Part of Deformations" paper and its extractRotation implementation, but the resulting rotation still includes scaling. Reverted back to original implementation in this pull request:

https://github.com/bulletphysics/bullet3/pull/1668

See also discussion details in the Bullet github tracker here:

https://github.com/bulletphysics/bullet ... -386286987

https://github.com/bulletphysics/bullet3/pull/1668

See also discussion details in the Bullet github tracker here:

https://github.com/bulletphysics/bullet ... -386286987

### Re: Is diagonlize/extractRotation broken, i.e., does nothing? see 3 lines of example code and try yourself

Also, eigen decomposition or svd work fine to get the principle axis and the rotation from the inertia tensors orientation to the principle axis. Since inertia tensor are 3x3 and symmetric there is a closed form solution.

Are you trying to compute the rotation that would diagonalize the matrix?

Yes, since bullet requires principle axis instead of inertia tensor.

Are you trying to compute the rotation that would diagonalize the matrix?

Yes, since bullet requires principle axis instead of inertia tensor.