コード例 #1
0
ファイル: test_Quaternion.py プロジェクト: alijaya/threepy
    def test_setFromEuler_setFromQuaternion(self):

        angles = [
            THREE.Vector3(1, 0, 0),
            THREE.Vector3(0, 1, 0),
            THREE.Vector3(0, 0, 1)
        ]

        # ensure euler conversion to/from THREE.Quaternion matches.
        for order in orders:
            for angle in angles:
                eulers2 = THREE.Euler().setFromQuaternion(
                    THREE.Quaternion().setFromEuler(
                        THREE.Euler(angle.x, angle.y, angle.z, order)), order)
                newAngle = THREE.Vector3(eulers2.x, eulers2.y, eulers2.z)
                self.assertAlmostEqual(newAngle.distanceTo(angle), 0)
コード例 #2
0
    def test_set_setFromVector3_toVector3(self):

        a = THREE.Euler()

        a.set(0, 1, 0, "ZYX")
        self.assertTrue(a.equals(eulerAzyx))  # Passednot
        self.assertTrue(not a.equals(eulerAxyz))  # Passednot
        self.assertTrue(not a.equals(eulerZero))  # Passednot

        vec = THREE.Vector3(0, 1, 0)

        b = THREE.Euler().setFromVector3(vec, "ZYX")
        self.assertTrue(a.equals(b))  # Passednot

        c = b.toVector3()
        self.assertTrue(c.equals(vec))  # Passednot
コード例 #3
0
ファイル: test_Matrix4.py プロジェクト: alijaya/threepy
    def test_compose_decompose( self ):
        tValues = [
            THREE.Vector3(),
            THREE.Vector3( 3, 0, 0 ),
            THREE.Vector3( 0, 4, 0 ),
            THREE.Vector3( 0, 0, 5 ),
            THREE.Vector3( -6, 0, 0 ),
            THREE.Vector3( 0, -7, 0 ),
            THREE.Vector3( 0, 0, -8 ),
            THREE.Vector3( -2, 5, -9 ),
            THREE.Vector3( -2, -5, -9 )
        ]

        sValues = [
            THREE.Vector3( 1, 1, 1 ),
            THREE.Vector3( 2, 2, 2 ),
            THREE.Vector3( 1, -1, 1 ),
            THREE.Vector3( -1, 1, 1 ),
            THREE.Vector3( 1, 1, -1 ),
            THREE.Vector3( 2, -2, 1 ),
            THREE.Vector3( -1, 2, -2 ),
            THREE.Vector3( -1, -1, -1 ),
            THREE.Vector3( -2, -2, -2 )
        ]

        rValues = [
            THREE.Quaternion(),
            THREE.Quaternion().setFromEuler( THREE.Euler( 1, 1, 0 ) ),
            THREE.Quaternion().setFromEuler( THREE.Euler( 1, -1, 1 ) ),
            THREE.Quaternion( 0, 0.9238795292366128, 0, 0.38268342717215614 )
        ]


        for t in tValues:
            for s in sValues:
                for r in rValues:

                    m = THREE.Matrix4().compose( t, r, s )
                    t2 = THREE.Vector3()
                    r2 = THREE.Quaternion()
                    s2 = THREE.Vector3()

                    m.decompose( t2, r2, s2 )

                    m2 = THREE.Matrix4().compose( t2, r2, s2 )

                    self.assertEqual( m, m2 )
コード例 #4
0
    def test_Matrix4_setFromEuler_Euler_fromRotationMatrix(self):

        testValues = [eulerZero, eulerAxyz, eulerAzyx]

        for v in testValues:

            m = THREE.Matrix4().makeRotationFromEuler(v)

            v2 = THREE.Euler().setFromRotationMatrix(m, v.order)
            m2 = THREE.Matrix4().makeRotationFromEuler(v2)
            self.assertTrue(matrixEquals4(m, m2, 0.0001))  # Passednot
コード例 #5
0
    def test_Quaternion_setFromEuler_Euler_fromQuaternion(self):

        testValues = [eulerZero, eulerAxyz, eulerAzyx]

        for v in testValues:

            q = THREE.Quaternion().setFromEuler(v)

            v2 = THREE.Euler().setFromQuaternion(q, v.order)
            q2 = THREE.Quaternion().setFromEuler(v2)
            self.assertTrue(quatEquals(q, q2))  # Passednot
コード例 #6
0
ファイル: test_Quaternion.py プロジェクト: alijaya/threepy
    def test_multiplyVector3(self):

        angles = [
            THREE.Euler(1, 0, 0),
            THREE.Euler(0, 1, 0),
            THREE.Euler(0, 0, 1)
        ]

        # ensure euler conversion for THREE.Quaternion matches that of THREE.Matrix4
        for order in orders:
            for angle in angles:
                orderAngle = angle.clone()
                orderAngle.order = order
                q = THREE.Quaternion().setFromEuler(orderAngle)
                m = THREE.Matrix4().makeRotationFromEuler(orderAngle)

                v0 = THREE.Vector3(1, 0, 0)
                qv = v0.clone().applyQuaternion(q)
                mv = v0.clone().applyMatrix4(m)

                self.assertAlmostEqual(qv.distanceTo(mv), 0)
コード例 #7
0
    def test_gimbalLocalQuat(self):

        # known problematic quaternions
        q1 = THREE.Quaternion(0.5207769385244341, -0.4783214164122354,
                              0.520776938524434, 0.47832141641223547)
        q2 = THREE.Quaternion(0.11284905712620674, 0.6980437630368944,
                              -0.11284905712620674, 0.6980437630368944)

        eulerOrder = "ZYX"

        # create Euler directly from a Quaternion
        eViaQ1 = THREE.Euler().setFromQuaternion(
            q1, eulerOrder)  # there is likely a bug here

        # create Euler from Quaternion via an intermediate Matrix4
        mViaQ1 = THREE.Matrix4().makeRotationFromQuaternion(q1)
        eViaMViaQ1 = THREE.Euler().setFromRotationMatrix(mViaQ1, eulerOrder)

        # the results here are different
        self.assertTrue(eulerEquals(
            eViaQ1, eViaMViaQ1))  # Passednot  # self result is correct
コード例 #8
0
ファイル: test_Quaternion.py プロジェクト: alijaya/threepy
    def test_multiplyQuaternions_multiply(self):

        angles = [
            THREE.Euler(1, 0, 0),
            THREE.Euler(0, 1, 0),
            THREE.Euler(0, 0, 1)
        ]

        q1 = THREE.Quaternion().setFromEuler(angles[0])
        q2 = THREE.Quaternion().setFromEuler(angles[1])
        q3 = THREE.Quaternion().setFromEuler(angles[2])

        q = THREE.Quaternion().multiplyQuaternions(q1, q2).multiply(q3)

        m1 = THREE.Matrix4().makeRotationFromEuler(angles[0])
        m2 = THREE.Matrix4().makeRotationFromEuler(angles[1])
        m3 = THREE.Matrix4().makeRotationFromEuler(angles[2])

        m = THREE.Matrix4().multiplyMatrices(m1, m2).multiply(m3)

        qFromM = THREE.Quaternion().setFromRotationMatrix(m)

        self.assertAlmostEqual(qSub(q, qFromM).length(), 0)
コード例 #9
0
ファイル: test_Quaternion.py プロジェクト: alijaya/threepy
from __future__ import division
import unittest
import math
import sys

import THREE

from Constants import *

orders = ['XYZ', 'YXZ', 'ZXY', 'ZYX', 'YZX', 'XZY']
eulerAngles = THREE.Euler(0.1, -0.3, 0.25)


def qSub(a, b):

    result = THREE.Quaternion()
    result.copy(a)

    result.x -= b.x
    result.y -= b.y
    result.z -= b.z
    result.w -= b.w

    return result


def doSlerpObject(aArr, bArr, t):

    a = THREE.Quaternion().fromArray(aArr)
    b = THREE.Quaternion().fromArray(bArr)
    c = THREE.Quaternion().fromArray(aArr)
コード例 #10
0
    def test_constructor_equals(self):

        a = THREE.Euler()
        self.assertTrue(a.equals(eulerZero))  # Passednot
        self.assertTrue(not a.equals(eulerAxyz))  # Passednot
        self.assertTrue(not a.equals(eulerAzyx))  # Passednot
コード例 #11
0
from __future__ import division

import unittest

import THREE

eulerZero = THREE.Euler(0, 0, 0, "XYZ")
eulerAxyz = THREE.Euler(1, 0, 0, "XYZ")
eulerAzyx = THREE.Euler(0, 1, 0, "ZYX")


def matrixEquals4(a, b, tolerance=0.0001):

    if len(a.elements) != len(b.elements):

        return False

    for i in xrange(len(a.elements)):

        delta = a.elements[i] - b.elements[i]
        if delta > tolerance:
            return False
    return True


def eulerEquals(a, b, tolerance=0.0001):

    diff = abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)
    return (diff < tolerance)