public void DivisionScalar()
        {
            double      s = 123.456;
            QuaternionD q = new QuaternionD(1.0, 2.0, 3.0, 4.0);
            QuaternionD expectedResult = new QuaternionD(1.0 / s, 2.0 / s, 3.0 / s, 4.0 / s);
            QuaternionD result         = QuaternionD.Divide(q, s);

            Assert.IsTrue(QuaternionD.AreNumericallyEqual(expectedResult, result));
        }
        public void QuaternionDDivideTest()
        {
            QuaternionD a = new QuaternionD(1.0f, 2.0f, 3.0f, 4.0f);
            QuaternionD b = new QuaternionD(5.0f, 6.0f, 7.0f, 8.0f);

            QuaternionD expected = new QuaternionD(-0.045977015f, -0.09195402f, -7.450581E-9f, 0.402298868f);
            QuaternionD actual;

            actual = QuaternionD.Divide(a, b);
            Assert.True(MathHelper.Equal(expected, actual), $"QuaternionD.Divide did not return the expected value: expected {expected} actual {actual}");
        }
        public void Division()
        {
            double      angle1 = 0.4;
            Vector3D    axis1  = new Vector3D(1.0, 2.0, 3.0);
            QuaternionD q1     = QuaternionD.CreateRotation(axis1, angle1);
            Matrix33D   m1     = Matrix33D.CreateRotation(axis1, angle1);

            double      angle2 = -1.6;
            Vector3D    axis2  = new Vector3D(1.0, -2.0, -3.5);
            QuaternionD q2     = QuaternionD.CreateRotation(axis2, angle2);
            Matrix33D   m2     = Matrix33D.CreateRotation(axis2, angle2);

            Vector3D v       = new Vector3D(0.3, -2.4, 5.6);
            Vector3D result1 = QuaternionD.Divide(q2, q1).Rotate(v);
            Vector3D result2 = m2 * m1.Inverse * v;

            Assert.IsTrue(Vector3D.AreNumericallyEqual(result1, result2));
        }