예제 #1
0
 def test_set_translate(self):
     self.assertEqual((mat4().set_translate((1, 2, 3)) * (3, 3, 3)),
                      (4, 5, 6))
     with self.assertRaises(TypeError):
         mat4().set_translate(1)
     with self.assertRaises(TypeError):
         mat4().set_translate((1, 2))
예제 #2
0
 def test_modulo(self):
     self.assertEqual(
         mat4(1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0),
         mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) % 4)
     self.assertEqual(
         mat4(3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0),
         mat4(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14,
              -15, -16) % 4)
예제 #3
0
 def test_position(self):
     self.assertEqual(mat4().translate((1, 2, 3)).position(), (1, 2, 3))
     self.assertEqual(mat4().rotate_x(90).translate((1, 2, 3)).position(),
                      (1, -3, 2))
     self.assertEqual(mat4().translate((1, 2, 3)).rotate_x(90).position(),
                      (1, 2, 3))
     a = mat4().rotate_x(90).translate((1, 2, 3))
     self.assertEqual(a.position(), a * (0, 0, 0))
예제 #4
0
    def test_compare_rotate_vec(self):
        v = vec3((1, 2, 3))
        self.assertAlmostEqual(mat4().rotate_x(90) * v, v.rotated_x(90))
        self.assertAlmostEqual(mat4().rotate_y(90) * v, v.rotated_y(90))
        self.assertAlmostEqual(mat4().rotate_z(90) * v, v.rotated_z(90))

        self.assertAlmostEqual(mat4().rotate_y(-90).rotate_z(90) * v,
                               v.rotated_z(90).rotated_y(-90))
        self.assertAlmostEqual(
            mat4().rotate_x(90).rotate_y(-90).rotate_z(90) * v,
            v.rotated_z(90).rotated_y(-90).rotated_x(90))
예제 #5
0
    def test_rotate(self):
        self.assertEqual((mat4().rotate_x(90) * (1, 2, 3)).round(),
                         vec3((1, -3, 2)))
        self.assertEqual(
            (mat4().rotate_y(90).rotate_x(90) * (1, 2, 3)).round(),
            vec3((2, -3, -1)))
        self.assertEqual((mat4().rotate_z(90).rotate_y(90).rotate_x(90) *
                          (1, 2, 3)).round(), vec3((3, 2, -1)))

        self.assertEqual((mat4().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)))
예제 #6
0
 def test_copy_vs_inplace(self):
     m = mat4()
     m += 1
     self.assertEqual(mat4() + 1, m)
     m = mat4()
     m -= 1
     self.assertEqual(mat4() - 1, m)
     m = mat4()
     m *= 2
     self.assertEqual(mat4() * 2, m)
     m = mat4()
     m /= 2
     self.assertEqual(mat4() / 2, m)
     m = mat4(1.5)
     m %= 1
     self.assertEqual(mat4(1.5) % 1, m)
예제 #7
0
 def test_scalar_aritm(self):
     self.assertEqual(
         mat4(1) + 1, mat4(
             (2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2)))
     self.assertEqual(mat4(1) * 3, mat4(3))
     self.assertEqual(
         mat4(2) - 1,
         mat4((1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1)))
     self.assertEqual(mat4(2) / 4, mat4(.5))
예제 #8
0
파일: quat.py 프로젝트: defgsus/pector
 def as_mat4(self):
     from pector import mat4
     """
     Returns a 4x4 rotation matrix from the quaternion.
     :return: mat4
     """
     m3 = self.as_mat3()
     return mat4(m3[0], m3[1], m3[2], 0., m3[3], m3[4], m3[5], 0., m3[6],
                 m3[7], m3[8], 0., 0., 0., 0., 1.)
예제 #9
0
 def test_scalar_aritm_inpl(self):
     a = mat4(1)
     a += 1
     self.assertEqual(
         a, mat4((2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2)))
     a = mat4(1)
     a *= 3
     self.assertEqual(a, mat4(3))
     a = mat4(2)
     a -= 1
     self.assertEqual(
         a,
         mat4((1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1)))
     a = mat4(2)
     a /= 4
     self.assertEqual(a, mat4(.5))
예제 #10
0
 def test_transpose(self):
     self.assertEqual(
         mat4((1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16)),
         mat4((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
               16)).transpose())
     self.assertEqual(
         mat4((1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16)),
         mat4((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
               16)).transposed())
     self.assertEqual(
         mat4((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)),
         mat4((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
               16)).transposed().transposed())
예제 #11
0
 def test_assignment(self):
     self.assertEqual("mat4(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1)",
                      str(mat4()))
     self.assertEqual("mat4(2,0,0,0, 0,2,0,0, 0,0,2,0, 0,0,0,2)",
                      str(mat4(2)))
     self.assertEqual(
         "mat4(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16)",
         str(mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)))
     self.assertEqual(
         "mat4(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16)",
         str(mat4((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))))
     self.assertEqual(
         "mat4(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16)",
         str(
             mat4((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12),
                  (13, 14, 15, 16))))
     self.assertEqual(
         "mat4(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16)",
         str(
             mat4(1, vec3(2, 3, 4), 5, 6, (7, 8), (9, ), 10, 11, (12, ), 13,
                  (14, 15), 16)))
예제 #12
0
 def test_scale(self):
     self.assertEqual((mat4().init_scale(2) * (1, 2, 3)), (2, 4, 6))
     self.assertEqual((mat4().scale(2) * (1, 2, 3)), (2, 4, 6))
     self.assertEqual((mat4().scale(2).scale(2) * (1, 2, 3)), (4, 8, 12))
     self.assertEqual((mat4().scale(10).init_scale(2) * (1, 2, 3)),
                      (2, 4, 6))
예제 #13
0
 def test_equal(self):
     self.assertEqual(mat4(1),
                      (1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1))
예제 #14
0
 def test_trace(self):
     self.assertEqual(
         34,
         mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
              16).trace())
예제 #15
0
 def test_translate(self):
     self.assertEqual((mat4().translate((1, 2, 3)) * (3, 3, 3)), (4, 5, 6))
     self.assertEqual((mat4().translate((1, 2, 3)).translate(
         (1, 2, 3)) * (3, 3, 3)), (5, 7, 9))
예제 #16
0
 def test_floor(self):
     self.assertEqual(mat4(1), mat4(1.4).floor())
     self.assertEqual(mat4(1), mat4(1.5).floor())
     self.assertEqual(mat4(1), mat4(1.6).floor())
     self.assertEqual(mat4(-2), mat4(-1.4).floor())
     self.assertEqual(mat4(-2), mat4(-1.5).floor())
     self.assertEqual(mat4(-2), mat4(-1.6).floor())
예제 #17
0
 def test_has_rotation(self):
     self.assertFalse(mat4(1).has_rotation())
     self.assertFalse(mat4(1).translate((1, 2, 3)).has_rotation())
     self.assertTrue(mat4(1).rotate_x(0.01).has_rotation())
예제 #18
0
 def test_mat4_x_mat4(self):
     self.assertEqual(
         mat4(28, 32, 36, 40, 56, 64, 72, 80, 84, 96, 108, 120, 112, 128,
              144, 160),
         mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) *
         mat4(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4))
예제 #19
0
 def test_dot(self):
     m = mat4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
     self.assertEqual(
         1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 + 6 * 6 + 7 * 7 + 8 * 8 +
         9 * 9 + 10 * 10 + 11 * 11 + 12 * 12 + 13 * 13 + 14 * 14 + 15 * 15 +
         16 * 16, m.dot(m))
예제 #20
0
 def test_round(self):
     self.assertEqual(mat4(0), mat4(0.49).round())
     self.assertEqual(mat4(0), mat4(0.5).round())
     self.assertEqual(mat4(1), mat4(0.51).round())
     self.assertEqual(mat4(0), mat4(-0.49).round())
     self.assertEqual(mat4(0), mat4(-0.5).round())
     self.assertEqual(mat4(-1), mat4(-0.51).round())
     self.assertEqual(mat4(0.5), mat4(0.49).round(1))
     self.assertEqual(mat4(0.5), mat4(0.5).round(1))
     self.assertEqual(mat4(0.5), mat4(0.51).round(1))
     self.assertEqual(mat4(-0.5), mat4(-0.49).round(1))
     self.assertEqual(mat4(-0.5), mat4(-0.5).round(1))
     self.assertEqual(mat4(-0.5), mat4(-0.51).round(1))
예제 #21
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)))
예제 #22
0
 def test_aritm(self):
     self.assertEqual(mat4(3), mat4(1) + mat4(2))
     self.assertEqual(mat4(1), mat4(2) - mat4(1))
예제 #23
0
 def __init__(self, name, transform=mat4()):
     super(CsgBase, self).__init__(name)
     self._has_transform = transform != mat4()
     self._transform = mat4(transform)
     self._itransform = self._transform.inversed_simple()
     self._id = abs(self.__hash__())
예제 #24
0
 def test_mat4_x_vec3(self):
     self.assertEqual(mat4(1) * (1, 2, 3), vec3(1, 2, 3))
     self.assertEqual(mat4(2) * (1, 2, 3), vec3(2, 4, 6))
예제 #25
0
 def set_transform(self, mat):
     self._has_transform = mat != mat4()
     self._transform = mat4(mat)
     self._itransform = self._transform.inversed_simple()
     return self
예제 #26
0
 def test_has_translation(self):
     self.assertFalse(mat4(1).has_translation())
     self.assertFalse(mat4(2).has_translation())
     self.assertFalse(mat4(1).rotate_axis((1, 2, 3), 23.).has_translation())
     self.assertTrue(mat4(1).translate((1, 2, 3)).has_translation())