Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 09/09/2005 at 08:26, xxxxxxxx wrote:
User Information: Cinema 4D Version: 9.1 Platform: Windows ; Mac ; Language(s) : C++ ;
--------- Hello
The problem in MatrixToRotAxis is this code
// Achse berechnen v->x= m.v2.z-m.v3.y; v->y= m.v3.x-m.v1.z; v->z= m.v1.y-m.v2.x; *v = !(*v);
if the matrix is near identity then v will be really small.. the normalization however will bring it to length 1. This results in an almost random unit vector. Which is now our rotation axis..
My workaround is:
Quaternion q; q.SetMatrix(LM(m)); if(Len(q.v)<1.0e-6) { v = Vector(1,0,0); w = 0; } else { v = SV(!(q.v)); w = 2.0*acos(q.w); }
Not that you would call this efficient. But it seems to work.
best regards Michael