Пример #1
0
 def test_contact_top(self):
     rect_1 = ("rectangle", 0.0, 0.0, 1.0, 1.0, 0.0)
     rect_2 = ("rectangle", 0.0, 1.0, 1.0, 1.0, 0.0)
     contact_points = []
     result = math_collision.is_rect_rect_collision(rect_1, rect_2, contact_points)
     self.assertEqual(result, True)
     self.assertEqual(contact_points, [(0.0, 1.0), (1.0, 1.0)])
Пример #2
0
 def test_contact_top(self):
     rect_1 = ("rectangle", 0.0, 0.0, 1.0, 1.0, 0.0)
     rect_2 = ("rectangle", 0.0, 1.0, 1.0, 1.0, 0.0)
     contact_points = []
     result = math_collision.is_rect_rect_collision(rect_1, rect_2,
                                                    contact_points)
     self.assertEqual(result, True)
     self.assertEqual(contact_points, [(0.0, 1.0), (1.0, 1.0)])
Пример #3
0
        def test_contact_top_side(self):
                print
                rect_2_angle = 0.0
                rect_1 = ("rectangle", 0.0, 0.0, 1.0, 1.0, 0.0)
                rect_2 = ("rectangle", 0.0, 1.0, 1.0, 1.0, rect_2_angle)
                contact_points = []
                result = math_collision.is_rect_rect_collision(rect_1, rect_2, contact_points)
                contact_sum_vector = math_collision.get_contact_sum_vector(contact_points, (0.0, 0.0))
                self.assertEqual(result, True)
                self.assertEqual(contact_points, [(0.0, 1.0), (1.0, 1.0)])
                self.assertEqual(contact_sum_vector, (0.5, 1.0))

                cases = [
                         # hit from above
                         (0.0, (1.0, -1.0), (1.0, 1.0)),
                         (0.0, (0.0, -1.0), (0.0, 1.0)),
                         (0.0, (-1.0, -1.0), (-1.0, 1.0)),

                         (180.0, (1.0, -1.0), (1.0, 1.0)),

                         # hit from below
                         (0.0, (1.0, 1.0), (1.0, -1.0)),
                         (0.0, (0.0, 1.0), (0.0, -1.0)),
                         (0.0, (-1.0, 1.0), (-1.0, -1.0)),

                         # 
                         (45.0, (1.0, 0.0), (0.0, 1.0)),
                         (45.0, (0.0, -1.0), (-1.0, 0.0)),

                         # hit from the left
                         (90.0, (1.0, 0.0), (-1.0, 0.0)),
                         (90.0, (1.0, 1.0), (-1.0, 1.0)),
                         (90.0, (1.0, -1.0), (-1.0, -1.0)),
                        ]
                for rect_2_angle, v_1, expected_v in cases:
                        rect_2_unit_axis_vector = math_2d.create_unit_vector(rect_2_angle)
                        parallel_v,perpend_v = math_2d.get_projection_vectors(rect_2_unit_axis_vector, v_1)
                        reflect_v = math_2d.vector_sub(v_1, math_2d.vector_mul(perpend_v, 2.0))
                        print rect_2_angle, v_1, ":", reflect_v
                        self.assertAlmostEqual(reflect_v[0], expected_v[0], places=5)
                        self.assertAlmostEqual(reflect_v[1], expected_v[1], places=5)