Пример #1
0
 def test_mat3_x_mat3(self):
     self.assertEqual(
         mat3(1 * 1 + 4 * 1 + 7 * 1, 2 * 1 + 5 * 1 + 8 * 1,
              3 * 1 + 6 * 1 + 9 * 1, 1 * 2 + 4 * 2 + 7 * 2,
              2 * 2 + 5 * 2 + 8 * 2, 3 * 2 + 6 * 2 + 9 * 2,
              1 * 3 + 4 * 3 + 7 * 3, 2 * 3 + 5 * 3 + 8 * 3,
              3 * 3 + 6 * 3 + 9 * 3),
         mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) * mat3(1, 1, 1, 2, 2, 2, 3, 3, 3))
Пример #2
0
 def _compare_mat3_quat_rotation(self, axis, deg):
     self.assertEqual(mat3().set_rotate_axis(axis, deg).round(4),
                      quat().set_rotate_axis(axis, deg).as_mat3().round(4))
     self.assertEqual(mat3().set_rotate_axis(axis, deg).round(4),
                      (mat3() * quat().set_rotate_axis(axis, deg)).round(4))
     self.assertEqual(
         mat3().set_rotate_axis(axis, deg).rotate_axis(axis, deg).round(4),
         (mat3() * quat().set_rotate_axis(axis, deg).rotate_axis(
             axis, deg)).round(4))
Пример #3
0
    def test_compare_rotate_vec(self):
        v = vec3((1, 2, 3))
        self.assertAlmostEqual(mat3().rotate_x(90) * v, v.rotated_x(90))
        self.assertAlmostEqual(mat3().rotate_y(90) * v, v.rotated_y(90))
        self.assertAlmostEqual(mat3().rotate_z(90) * v, v.rotated_z(90))

        self.assertAlmostEqual(mat3().rotate_y(-90).rotate_z(90) * v,
                               v.rotated_z(90).rotated_y(-90))
        self.assertAlmostEqual(
            mat3().rotate_x(90).rotate_y(-90).rotate_z(90) * v,
            v.rotated_z(90).rotated_y(-90).rotated_x(90))
Пример #4
0
    def test_rotate(self):
        self.assertEqual((mat3().rotate_x(90) * (1, 2, 3)).round(),
                         vec3((1, -3, 2)))
        self.assertEqual(
            (mat3().rotate_y(90).rotate_x(90) * (1, 2, 3)).round(),
            vec3((2, -3, -1)))
        self.assertEqual((mat3().rotate_z(90).rotate_y(90).rotate_x(90) *
                          (1, 2, 3)).round(), vec3((3, 2, -1)))

        self.assertEqual((mat3().rotate_axis((0, 0, 1), 90).rotate_axis(
            (0, 1, 0), 90).rotate_axis((1, 0, 0), 90) * (1, 2, 3)).round(),
                         vec3((3, 2, -1)))
Пример #5
0
 def test_rotate(self):
     self.assertEqual(quat().set_rotate_axis((1, 2, 3), 4),
                      quat((1, 2, 3), 4))
     self.assertEqual(
         mat3().set_rotate_axis((1, 0, 0), 0).round(),
         quat().set_rotate_axis((1, 0, 0), 0).as_mat3().round())
     self.assertEqual(
         mat3().set_rotate_axis((1, 0, 0), 90).round(),
         quat().set_rotate_axis((1, 0, 0), 90).as_mat3().round())
     for i in range(100):
         axis = vec3(self.r.gauss(0, 1), self.r.gauss(0, 1),
                     self.r.gauss(0, 1)).normalize()
         deg = self.r.uniform(-360, 360)
         self._compare_mat3_quat_rotation(axis, deg)
Пример #6
0
 def test_copy_vs_inplace(self):
     m = mat3()
     m += 1
     self.assertEqual(mat3() + 1, m)
     m = mat3()
     m -= 1
     self.assertEqual(mat3() - 1, m)
     m = mat3()
     m *= 2
     self.assertEqual(mat3() * 2, m)
     m = mat3()
     m /= 2
     self.assertEqual(mat3() / 2, m)
     m = mat3(1.5)
     m %= 1
     self.assertEqual(mat3(1.5) % 1, m)
Пример #7
0
 def test_scalar_aritm_inpl(self):
     a = mat3(1)
     a += 1
     self.assertEqual(a, mat3((2, 1, 1, 1, 2, 1, 1, 1, 2)))
     a = mat3(1)
     a *= 3
     self.assertEqual(a, mat3(3))
     a = mat3(2)
     a -= 1
     self.assertEqual(a, mat3((1, -1, -1, -1, 1, -1, -1, -1, 1)))
     a = mat3(2)
     a /= 4
     self.assertEqual(a, mat3(.5))
Пример #8
0
 def test_transpose(self):
     self.assertEqual(mat3((1, 4, 7, 2, 5, 8, 3, 6, 9)),
                      mat3((1, 2, 3, 4, 5, 6, 7, 8, 9)).transpose())
     self.assertEqual(mat3((1, 4, 7, 2, 5, 8, 3, 6, 9)),
                      mat3((1, 2, 3, 4, 5, 6, 7, 8, 9)).transposed())
     self.assertEqual(
         mat3((1, 2, 3, 4, 5, 6, 7, 8, 9)),
         mat3((1, 2, 3, 4, 5, 6, 7, 8, 9)).transposed().transposed())
Пример #9
0
 def test_assignment(self):
     self.assertEqual("mat3(1,0,0, 0,1,0, 0,0,1)", str(mat3()))
     self.assertEqual("mat3(2,0,0, 0,2,0, 0,0,2)", str(mat3(2)))
     self.assertEqual("mat3(1,2,3, 4,5,6, 7,8,9)",
                      str(mat3(1, 2, 3, 4, 5, 6, 7, 8, 9)))
     self.assertEqual("mat3(1,2,3, 4,5,6, 7,8,9)",
                      str(mat3((1, 2, 3, 4, 5, 6, 7, 8, 9))))
     self.assertEqual("mat3(1,2,3, 4,5,6, 7,8,9)",
                      str(mat3((1, 2, 3), (4, 5, 6), (7, 8, 9))))
     self.assertEqual("mat3(1,2,3, 4,5,6, 7,8,9)",
                      str(mat3(vec3(1, 2, 3), 4, (5, 6), 7, (8, ), 9)))
Пример #10
0
 def test_mat_conversion_concat(self):
     for i in range(100):
         q = quat()
         m = mat3()
         # TODO: more than one transform is way off
         for j in range(1):
             axis = vec3(self.r.gauss(0, 1), self.r.gauss(0, 1),
                         self.r.gauss(0, 1)).normalize()
             deg = self.r.uniform(-180 / 5, 180 / 5)
             q.rotate_axis(axis, deg)
             m.rotate_axis(axis, deg)
             qm = q.as_mat3().round(3)
             mm = m.rounded(3)
             diff = abs(sum(qm - mm))
             if diff > .1:
                 self.assertEqual(qm, mm)
             self.assertLess(diff, 0.1)
Пример #11
0
 def test_mat_conversion(self):
     self.assertEqual(quat(), mat3().as_quat())
     self._compare_quat_mat(quat((1, 0, 0), 90), mat3().set_rotate_x(90.))
     self._compare_quat_mat(quat((0, 1, 0), 90), mat3().set_rotate_y(90.))
     self._compare_quat_mat(quat((0, 0, 1), 90), mat3().set_rotate_z(90.))
     for i in range(100):
         axis = vec3(self.r.gauss(0, 1), self.r.gauss(0, 1),
                     self.r.gauss(0, 1)).normalize()
         deg = self.r.uniform(-119, 119)
         self._compare_quat_mat(quat(axis, deg),
                                mat3().set_rotate_axis(axis, deg))
         self._compare_quat_mat(quat(-axis, deg),
                                mat3().set_rotate_axis(-axis, deg))
Пример #12
0
 def as_mat3(self):
     from pector import mat3
     """
     Returns a 3x3 rotation matrix from the quaternion.
     :return: mat3
     """
     x = self.x + self.x
     y = self.y + self.y
     z = self.z + self.z
     wx = x * self.w
     wy = y * self.w
     wz = z * self.w
     xx = x * self.x
     xy = y * self.x
     xz = z * self.x
     yy = y * self.y
     yz = z * self.y
     zz = z * self.z
     m = mat3(1.0 - (yy + zz), xy + wz, xz - wy, xy - wz, 1.0 - (xx + zz),
              yz + wx, xz + wy, yz - wx, 1.0 - (xx + yy))
     return m
Пример #13
0
 def test_equal(self):
     self.assertEqual(mat3(1), (1, 0, 0, 0, 1, 0, 0, 0, 1))
Пример #14
0
 def test_scalar_aritm(self):
     self.assertEqual(mat3(1) + 1, mat3((2, 1, 1, 1, 2, 1, 1, 1, 2)))
     self.assertEqual(mat3(1) * 3, mat3(3))
     self.assertEqual(mat3(2) - 1, mat3((1, -1, -1, -1, 1, -1, -1, -1, 1)))
     self.assertEqual(mat3(2) / 4, mat3(.5))
Пример #15
0
 def test_mat4_mat3_conversion(self):
     self.assertEqual(mat4(1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9, 0, 0, 0, 0, 1),
                      mat4(mat3(1, 2, 3, 4, 5, 6, 7, 8, 9)))
     self.assertEqual(
         mat3(1, 2, 3, 5, 6, 7, 9, 10, 11),
         mat3(mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)))
Пример #16
0
 def test_as_list(self):
     self.assertEqual([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                      mat3(1, 2, 3, 4, 5, 6, 7, 8, 9).as_list_list())
     self.assertEqual([[1, 4, 7], [2, 5, 8], [3, 6, 9]],
                      mat3(1, 2, 3, 4, 5, 6, 7, 8,
                           9).as_list_list(row_major=True))
Пример #17
0
 def test_trace(self):
     self.assertEqual(15, mat3(1, 2, 3, 4, 5, 6, 7, 8, 9).trace())
Пример #18
0
 def test_scale(self):
     self.assertEqual((mat3().init_scale(2) * (1, 2, 3)), (2, 4, 6))
     self.assertEqual((mat3().scale(2) * (1, 2, 3)), (2, 4, 6))
     self.assertEqual((mat3().scale(2).scale(2) * (1, 2, 3)), (4, 8, 12))
     self.assertEqual((mat3().scale(10).init_scale(2) * (1, 2, 3)),
                      (2, 4, 6))
Пример #19
0
 def test_mat3_x_vec3(self):
     self.assertEqual(mat3(1) * (1, 2, 3), vec3(1, 2, 3))
     self.assertEqual(mat3(2) * (1, 2, 3), vec3(2, 4, 6))
Пример #20
0
 def test_floor(self):
     self.assertEqual(mat3(1), mat3(1.4).floor())
     self.assertEqual(mat3(1), mat3(1.5).floor())
     self.assertEqual(mat3(1), mat3(1.6).floor())
     self.assertEqual(mat3(-2), mat3(-1.4).floor())
     self.assertEqual(mat3(-2), mat3(-1.5).floor())
     self.assertEqual(mat3(-2), mat3(-1.6).floor())
Пример #21
0
 def test_round(self):
     self.assertEqual(mat3(0), mat3(0.49).round())
     self.assertEqual(mat3(0), mat3(0.5).round())
     self.assertEqual(mat3(1), mat3(0.51).round())
     self.assertEqual(mat3(0), mat3(-0.49).round())
     self.assertEqual(mat3(0), mat3(-0.5).round())
     self.assertEqual(mat3(-1), mat3(-0.51).round())
     self.assertEqual(mat3(0.5), mat3(0.49).round(1))
     self.assertEqual(mat3(0.5), mat3(0.5).round(1))
     self.assertEqual(mat3(0.5), mat3(0.51).round(1))
     self.assertEqual(mat3(-0.5), mat3(-0.49).round(1))
     self.assertEqual(mat3(-0.5), mat3(-0.5).round(1))
     self.assertEqual(mat3(-0.5), mat3(-0.51).round(1))
Пример #22
0
 def test_dot(self):
     m = mat3(1, 2, 3, 4, 5, 6, 7, 8, 9)
     self.assertEqual(
         1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 + 6 * 6 + 7 * 7 + 8 * 8 +
         9 * 9, m.dot(m))
Пример #23
0
 def test_modulo(self):
     self.assertEqual(mat3(1, 2, 3, 0, 1, 2, 3, 0, 1),
                      mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) % 4)
     self.assertEqual(mat3(3, 2, 1, 0, 3, 2, 1, 0, 3),
                      mat3(-1, -2, -3, -4, -5, -6, -7, -8, -9) % 4)
Пример #24
0
 def test_aritm(self):
     self.assertEqual(mat3(3), mat3(1) + mat3(2))
     self.assertEqual(mat3(1), mat3(2) - mat3(1))
Пример #25
0
 def test_has_rotation(self):
     self.assertFalse(mat3(1).has_rotation())
     self.assertFalse(mat3(1).scale((1, 2, 3)).has_rotation())
     self.assertTrue(mat3(1).rotate_x(0.01).has_rotation())