public void RotationMatrix_ToQuaternion_ToRotationMatrix()
        {
            RotationMatrix m1, m2;
            Quaternion     q;
            Vector         vecX, vecY;
            int            dir;

            double[] r = new double[9];

            for (var i = 0; i < 100; i++)
            {
                vecX = Vector.RandomFromDoubles(-100, 100);
                vecY = Vector.RandomFromDoubles(-100, 100);
                dir  = Vector.CompareDirections(vecX, vecY);

                m1 = new RotationMatrix(vecX, vecY);
                q  = m1.ToQuaternion();
                m2 = q.ToRotationMatrix();

                Trace.WriteLine("");
                Trace.WriteLine(vecX + " " + vecY + " dir:" + dir);
                Trace.WriteLine(m1);
                Trace.WriteLine(q);
                Trace.WriteLine(m2);

                Assert.IsTrue(m1.IsSimilar(m2));
            }
        }
        public void RotationMatrix_ToQuaternion_LowTrace()
        {
            RotationMatrix m  = new RotationMatrix(new Vector(0, 1, 0), new Vector(-1, 0, 0));
            Quaternion     q  = m.ToQuaternion();
            RotationMatrix m1 = q.ToRotationMatrix();

            Assert.IsTrue(m.IsSimilar(m1));
        }