コード例 #1
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
 def test_distance(self):
     self.assertAlmostEqual(
         quat.distance(quat.from_pyr(90, 0, 0), quat.from_pyr(-90, 0, 0)),
         1)
     self.assertAlmostEqual(
         quat.distance(quat.from_pyr(0, -180, 0), quat.from_pyr(0, 180, 0)),
         0)
     self.assertAlmostEqual(quat.distance(quat(), quat()), 0)
     self.assertAlmostEqual(quat.distance(quat(), quat(0, 0, 0, -1)), 0)
コード例 #2
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
    def test_multiply(self):
        a = vec3(1, 2, 3)
        self.assertAlmostEqual(quat() * a, a)
        self.assertAlmostEqual(a * quat(), a)

        self.assertAlmostEqual(quat.from_pyr(90, 0, 0) * vec3.forward, vec3.up)
        self.assertAlmostEqual(vec3.up * quat.from_pyr(90, 0, 0), vec3.forward)

        b = quat.from_pyr(10, 20, 30)
        c = quat.from_pyr(-40, 50, -60)

        self.assertAlmostEqual(b * (c * a), (b * c) * a)
        self.assertAlmostEqual((a * b) * c, a * (b * c))
コード例 #3
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
    def test_angles(self):
        q = quat.from_pyr(20, 40, 70)
        q2 = quat.from_pyr(0, 0, 70) * quat.from_pyr(0, 40, 0) * quat.from_pyr(
            20, 0, 0)
        self.assertAlmostEqual(q, q2)

        for a in [-90, -40, 0, 40, 90]:
            self.assertAlmostEqual(quat.from_pyr(a, 0, 0).pitch, a)
        for a in [-180, -90, -40, 0, 40, 90, 180]:
            self.assertAlmostEqual(quat.from_pyr(0, a, 0).yaw, a)
        for a in [-90, -40, 0, 40, 90]:
            self.assertAlmostEqual(quat.from_pyr(0, 0, a).roll, a)

        for p in [-90, -40, 0, 40, 90]:
            for y in [-180, -90, -40, 0, 40, 90, 180]:
                q = quat.from_pyr(p, y, 0)
                self.assertAlmostEqual(q.pitch, p)
                self.assertAlmostEqual(q.yaw, y)

                q2 = quat.from_pyr(q.pitch, q.yaw, q.roll)
                self.assertAlmostEqual(q, q2)
コード例 #4
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
    def test_invert(self):
        a = quat.from_pyr(10, 20, 30)
        b = quat(a)

        #static
        quat.invert(a)
        self.assertEqual(a, b)  #unchanged

        #instance
        self.assertAlmostEqual(a.invert(), quat.invert(b))
        self.assertAlmostEqual(a, quat.invert(b))

        self.assertAlmostEqual(quat.invert(quat()), quat())

        self.assertAlmostEqual(a * quat.invert(a), quat())
        self.assertAlmostEqual(a * (quat.invert(a) * b), b)

        c = vec3(1, 2, 3)
        self.assertAlmostEqual(quat.invert(a) * c, c * a)
コード例 #5
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
    def test_initialization_and_value_set(self):
        a = quat()
        self.assertEqual(a.x, 0)
        self.assertEqual(a.y, 0)
        self.assertEqual(a.z, 0)
        self.assertEqual(a.w, 1)

        b = quat.from_pyr(0, 0, 0)
        self.assertAlmostEqual(a, b)

        b.set(1, 2, 3, 4)
        self.assertAlmostEqual(b, quat(1, 2, 3, 4))

        c = quat(b)
        self.assertFalse(c is b)
        self.assertEqual(b, c)

        d = c.copy()
        self.assertFalse(c is d)
        self.assertEqual(c, d)
コード例 #6
0
ファイル: test_quat.py プロジェクト: beep39/pymikuvr
    def test_rot_direction(self):

        # https://github.com/beep39/pymikuvr/wiki/Coordinate-system

        self.assertAlmostEqual(
            quat.from_pyr(90, 0, 0) * vec3(0, 1, 0), vec3(0, 0, 1))
        self.assertAlmostEqual(
            quat.from_pyr(0, 0, 90) * vec3(1, 0, 0), vec3(0, 1, 0))
        self.assertAlmostEqual(
            quat.from_pyr(0, 90, 0) * vec3(0, 0, 1), vec3(1, 0, 0))

        self.assertAlmostEqual(quat.from_pyr(90, 0, 0) * vec3.forward, vec3.up)
        self.assertAlmostEqual(quat.from_pyr(0, 0, 90) * vec3.right, vec3.up)
        self.assertAlmostEqual(
            quat.from_pyr(0, 90, 0) * vec3.right, vec3.forward)
コード例 #7
0
ファイル: test_transform.py プロジェクト: beep39/pymikuvr
    def test_posrot(self):
        v = vec3(1, 2, 3)
        q = quat.from_pyr(10, 20, 30)

        a = transform()
        a.pos.set(v.x, v.y, v.z)
        self.assertAlmostEqual(a.pos, v)
        self.assertAlmostEqual(a.local_pos, v)
        a.rot.set(q.x, q.y, q.z, q.w)
        self.assertAlmostEqual(a.rot, q)
        self.assertAlmostEqual(a.local_rot, q)

        b = transform()
        b.pos = v
        self.assertAlmostEqual(b.pos, v)
        self.assertAlmostEqual(b.local_pos, v)
        b.rot = q
        self.assertAlmostEqual(b.rot, q)
        self.assertAlmostEqual(b.local_rot, q)

        c = transform()
        c.local_pos.set(v.x, v.y, v.z)
        self.assertAlmostEqual(c.pos, v)
        self.assertAlmostEqual(c.local_pos, v)
        c.local_rot.set(q.x, q.y, q.z, q.w)
        self.assertAlmostEqual(c.rot, q)
        self.assertAlmostEqual(c.local_rot, q)

        d = transform()
        d.local_pos = v
        self.assertAlmostEqual(d.pos, v)
        self.assertAlmostEqual(d.local_pos, v)
        d.local_rot = q
        self.assertAlmostEqual(d.rot, q)
        self.assertAlmostEqual(d.local_rot, q)

        gc.collect()