Пример #1
0
 def test_rotate_to(self):
     self.assertEqual(quat().set_rotate_axis((1, 0, 0), 90),
                      vec3(0, 0, -1).get_rotation_to((0, 1, 0)))
     self.assertEqual(quat().set_rotate_axis((0, 1, 0), 90),
                      vec3(0, 0, 1).get_rotation_to((1, 0, 0)))
     self.assertEqual(quat().set_rotate_axis((0, 0, 1), 90),
                      vec3(0, 1, 0).get_rotation_to((-1, 0, 0)))
Пример #2
0
 def test_setitem(self):
     a = vec3(0)
     a[0] = 1
     self.assertEqual(vec3(1, 0, 0), a)
     a[1] = 2
     self.assertEqual(vec3(1, 2, 0), a)
     a[2] = 3
     self.assertEqual(vec3(1, 2, 3), a)
     with self.assertRaises(IndexError):
         a[3] = 1
Пример #3
0
 def test_properties(self):
     self.assertEqual(vec3(1, 2, 3).x, 1)
     self.assertEqual(vec3(1, 2, 3).y, 2)
     self.assertEqual(vec3(1, 2, 3).z, 3)
     a = vec3()
     a.x = 5
     self.assertEqual((5, 0, 0), a)
     a.y = 6
     self.assertEqual((5, 6, 0), a)
     a.z = 7
     self.assertEqual((5, 6, 7), a)
Пример #4
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)))
Пример #5
0
 def test_getitem(self):
     a = vec3(1, 2, 3)
     self.assertEqual(1, a[0])
     self.assertEqual(2, a[1])
     self.assertEqual(3, a[2])
     with self.assertRaises(IndexError):
         a[3]
Пример #6
0
 def get_normal(self, pos, e=0.001):
     return vec3(
         self.get_distance(pos + (e, 0, 0)) - self.get_distance(pos -
                                                                (e, 0, 0)),
         self.get_distance(pos + (0, e, 0)) - self.get_distance(pos -
                                                                (0, e, 0)),
         self.get_distance(pos + (0, 0, e)) -
         self.get_distance(pos - (0, 0, e))).normalize_safe()
Пример #7
0
 def test_round(self):
     self.assertEqual((0, 0, 1), vec3(0.49, 0.5, 0.51).round())
     self.assertEqual((0, 0, -1), vec3(-0.49, -0.5, -0.51).round())
     self.assertEqual((0.5, 0.5, 0.5), vec3(0.49, 0.5, 0.51).round(1))
     self.assertEqual((-0.5, -0.5, -0.5), vec3(-0.49, -0.5, -0.51).round(1))
     self.assertEqual((0.12346, 0.12346, 0.12341),
                      vec3(0.123456, 0.123456789, 0.1234123456789).round(5))
     self.assertEqual((0, 0, 1), vec3(0.49, 0.5, 0.51).rounded())
     self.assertEqual((0, 0, -1), vec3(-0.49, -0.5, -0.51).rounded())
Пример #8
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)))
Пример #9
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))
Пример #10
0
 def test_cross(self):
     self.assertEqual((0, 0, 1), vec3(1, 0, 0).cross((0, 1, 0)))
     self.assertEqual((0, -1, 0), vec3(1, 0, 0).cross((0, 0, 1)))
     self.assertEqual((1, 0, 0), vec3(0, 1, 0).cross((0, 0, 1)))
     self.assertEqual((0, 0, 1), vec3(1, 0, 0).crossed((0, 1, 0)))
     self.assertEqual((0, -1, 0), vec3(1, 0, 0).crossed((0, 0, 1)))
     self.assertEqual((1, 0, 0), vec3(0, 1, 0).crossed((0, 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 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)
Пример #13
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)
Пример #14
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)))
Пример #15
0
    def test_div(self):
        self.assertEqual(vec3(1.5), vec3(3) / vec3(2))
        self.assertEqual(vec3(1.5), vec3(3) / 2)
        self.assertEqual(vec3(2, 1, .5), vec3(2) / (1, 2, 4))
        self.assertEqual(vec3(2, 1, .5), vec3(2) / vec3((1, 2, 4)))
        self.assertEqual(vec3(1.5), 3 / vec3(2))
        self.assertEqual(vec3(.5, 1, 1.5), (1, 2, 3) / vec3(2))

        a = vec3(8)
        a /= 2
        self.assertEqual(vec3(4), a)
        a /= [1, 2, 4]
        self.assertEqual(vec3((4, 2, 1)), a)
Пример #16
0
 def test_iter(self):
     self.assertEqual([1, 2, 3], [x for x in vec3(1, 2, 3)])
Пример #17
0
 def test_abs(self):
     self.assertEqual(vec3(1, 2, 3), abs(vec3(-1, -2, -3)))
     self.assertEqual(vec3(1, 2, 3), abs(vec3(1, -2, 3)))
Пример #18
0
 def test_floor(self):
     self.assertEqual(vec3(1, 2, 3), vec3(1.4, 2.5, 3.6).floor())
     self.assertEqual(vec3(-2, -3, -4), vec3(-1.4, -2.5, -3.6).floor())
     self.assertEqual(vec3(1, 2, 3), vec3(1.4, 2.5, 3.6).floored())
     self.assertEqual(vec3(-2, -3, -4), vec3(-1.4, -2.5, -3.6).floored())
Пример #19
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))
Пример #20
0
    def test_add(self):
        self.assertEqual(vec3(3), vec3(1) + 2)
        self.assertEqual(vec3(3), vec3(1) + vec3(2))
        self.assertEqual(vec3(3, 5, 7), vec3(1, 2, 3) + vec3(2, 3, 4))
        self.assertEqual(vec3(3), vec3(1) + vec3(2))
        self.assertEqual(vec3(2, 3, 4), vec3(1) + [1, 2, 3])
        self.assertEqual(vec3(2, 3, 4), vec3(1) + ["1", "2", "3"])

        self.assertEqual(vec3(3), 2 + vec3(1))
        self.assertEqual(vec3(3), "2" + vec3(1))
        self.assertEqual(vec3(2, 3, 4), [1, 2, 3] + vec3(1))
        self.assertEqual(vec3(2, 3, 4), ["1", "2", "3"] + vec3(1))

        with self.assertRaises(TypeError):
            vec3() + [1, 2]

        a = vec3(1)
        a += 1
        self.assertEqual(vec3(2), a)
        a += [1, 2, 3]
        self.assertEqual(vec3(3, 4, 5), a)
Пример #21
0
    def test_rotated(self):
        self.assertEqual(vec3(1, -3, 2), vec3(1, 2, 3).rotated_x(90).rounded())
        self.assertEqual(vec3(3, 2, -1), vec3(1, 2, 3).rotated_y(90).rounded())
        self.assertEqual(vec3(-2, 1, 3), vec3(1, 2, 3).rotated_z(90).rounded())
        self.assertEqual(vec3(3, 2, -1),
                         vec3(2, -3, -1).rotated_z(90).rounded())

        self.assertEqual(vec3(1, -3, 2),
                         vec3(1, 2, 3).rotated_axis((1, 0, 0), 90).rounded())
        self.assertEqual(vec3(3, 2, -1),
                         vec3(1, 2, 3).rotated_axis((0, 1, 0), 90).rounded())
        self.assertEqual(vec3(-2, 1, 3),
                         vec3(1, 2, 3).rotated_axis((0, 0, 1), 90).rounded())

        self.assertEqual(vec3(2, -3, -1),
                         vec3(1, 2, 3).rotated_x(90).rotated_y(90).rounded())
        self.assertEqual(
            vec3(3, 2, -1),
            vec3(1, 2, 3).rotated_x(90).rotated_y(90).rotated_z(90).rounded())

        self.assertEqual(
            vec3(3, 2, -1),
            vec3(1, 2, 3).rotated_axis((1, 0, 0), 90).rotated_axis(
                (0, 1, 0), 90).rotated_axis((0, 0, 1), 90).rounded())
Пример #22
0
    def test_sub(self):
        self.assertEqual(vec3(1), vec3(3) - vec3(2))
        self.assertEqual(vec3(1), vec3(3) - 2)
        self.assertEqual(vec3(2, 1, 0), vec3(3) - (1, 2, 3))
        self.assertEqual(vec3(1), 3 - vec3(2))
        self.assertEqual(vec3(-1, 0, 1), (1, 2, 3) - vec3(2))

        a = vec3(1)
        a -= 2
        self.assertEqual(vec3(-1), a)
        a -= [1, 2, 3]
        self.assertEqual(vec3((-2, -3, -4)), a)
Пример #23
0
 def test_equal(self):
     self.assertTrue(vec3(1) == vec3(1))
     self.assertFalse(vec3(1) == vec3(2))
     self.assertTrue(vec3(1) == (1, 1, 1))
     self.assertFalse(vec3(1) == (1, 1))
Пример #24
0
 def pos_to_local(self, pos):
     return self._itransform * pos if self.has_transform else vec3(pos)
Пример #25
0
    def test_mul(self):
        self.assertEqual(vec3(6), vec3(2) * vec3(3))
        self.assertEqual(vec3(6), vec3(2) * 3)
        self.assertEqual(vec3(2, 4, 6), vec3(2) * (1, 2, 3))
        self.assertEqual(vec3(2, 4, 6), vec3(2) * vec3(1, 2, 3))
        self.assertEqual(vec3(6), 2 * vec3(3))
        self.assertEqual(vec3(3, 6, 9), (1, 2, 3) * vec3(3))

        a = vec3(1)
        a *= 2
        self.assertEqual(vec3(2), a)
        a *= [1, 2, 3]
        self.assertEqual(vec3(2, 4, 6), a)
Пример #26
0
 def test_rotate_to_mat(self):
     cur = vec3(0, 1, 0)
     goal = vec3(1, 0, 0)
     v = cur.get_rotation_to(goal).as_mat3() * cur
     self.assertEqual(goal.rounded(3), v.rounded(3))
Пример #27
0
 def test_mod(self):
     self.assertEqual(vec3(1, 0, 1), vec3(1, 2, 3) % 2)
     self.assertEqual(vec3(1, 2, .5), vec3(1, 2, 3) % 2.5)
Пример #28
0
 def test_dot(self):
     self.assertEqual(32, vec3(1, 2, 3).dot((4, 5, 6)))
     with self.assertRaises(TypeError):
         vec3().dot((1, 2))
Пример #29
0
    def test_assignment(self):
        self.assertEqual(
            "vec3(0, 0, 0)",
            str(vec3()),
        )
        self.assertEqual("vec3(1, 1, 1)", str(vec3(1)))
        self.assertEqual("vec3(5, 5, 5)", str(vec3("5")))
        self.assertEqual("vec3(1, 2, 0)", str(vec3(1, 2)))
        self.assertEqual("vec3(1, 2, 3)", str(vec3(1, 2, 3)))
        self.assertEqual("vec3(1, 2, 3)", str(vec3("1", "2", "3")))
        self.assertEqual("vec3(1, 0, 0)", str(vec3((1, ))))
        self.assertEqual("vec3(1, 2, 0)", str(vec3((1, 2))))
        self.assertEqual("vec3(1, 2, 3)", str(vec3((1, 2, 3))))
        self.assertEqual("vec3(1, 2, 3)", str(vec3((1, 2), 3)))
        self.assertEqual("vec3(1, 2, 3)", str(vec3(1, (2, 3))))
        self.assertEqual("vec3(1, 2, 3)", str(vec3(1, (2, ), 3)))
        self.assertEqual("vec3(1, 2, 3)", str(vec3(("1", "2", "3"))))
        with self.assertRaises(ValueError):
            vec3(1, 2, 3, 4)
        with self.assertRaises(ValueError):
            vec3((1, 2, 3, 4))
        with self.assertRaises(TypeError):
            vec3("bla")
        with self.assertRaises(TypeError):
            vec3({"x": 23})

        self.assertEqual(str(vec3([1])), "vec3(1, 0, 0)")
        self.assertEqual(str(vec3([1, 2])), "vec3(1, 2, 0)")