public void TestChain()
    {
        Quaternion q1  = Quaternion.RotationYawPitchRoll(0.1f, 0.2f, 0.3f);
        Quaternion q2  = Quaternion.RotationYawPitchRoll(0.2f, -0.3f, 0.4f);
        Quaternion q12 = q1.Chain(q2);

        Assert.AreEqual(1, q12.Length(), 1e-4, "chained result is normalized");

        Vector3 v = new Vector3(3, 4, 5);

        var expected = Vector3.Transform(Vector3.Transform(v, q1), q2);
        var actual   = Vector3.Transform(v, q1.Chain(q2));

        Assert.AreEqual(0, Vector3.Distance(expected, actual), 1e-4);
    }
示例#2
0
    public void TestQuaternionChaining()
    {
        Quaternion q1 = Quaternion.RotationYawPitchRoll(1, 2, 3);
        Quaternion q2 = Quaternion.RotationYawPitchRoll(2, 3, 4);

        Vector3 v = new Vector3(3, 4, 5);

        Vector3 expectedResult = Vector3.Transform(Vector3.Transform(v, q1), q2);
        Vector3 actualResult   = Vector3.Transform(v, q1.Chain(q2));

        Assert.IsTrue(Vector3.NearEqual(expectedResult, actualResult, 1e-5f * Vector3.One));
    }
示例#3
0
    public Quaternion TransformToOrientedSpace(Quaternion objectSpaceRotation)
    {
        Quaternion orientatedSpaceRotation = orientation.Chain(objectSpaceRotation).Chain(inverseOrientation);

        return(orientatedSpaceRotation);
    }