def test_perpendicular_vectors(self): self.assertEqual( math_2d.get_projection_vectors((1.0, 0.0), (1.0, 0.0)), ((1.0, 0.0), (0.0, 0.0))) self.assertEqual( math_2d.get_projection_vectors((1.0, 0.0), (-1.0, 0.0)), ((-1.0, 0.0), (0.0, 0.0))) self.assertEqual( math_2d.get_projection_vectors((1.0, 0.0), (0.0, 1.0)), ((0.0, 0.0), (0.0, 1.0))) self.assertEqual( math_2d.get_projection_vectors((1.0, 0.0), (0.0, -1.0)), ((0.0, 0.0), (0.0, -1.0))) self.assertEqual( math_2d.get_projection_vectors((-1.0, 0.0), (1.0, 0.0)), ((1.0, 0.0), (0.0, 0.0))) self.assertEqual( math_2d.get_projection_vectors((-1.0, 0.0), (-1.0, 0.0)), ((-1.0, 0.0), (0.0, 0.0))) self.assertEqual( math_2d.get_projection_vectors((-1.0, 0.0), (0.0, 1.0)), ((0.0, 0.0), (0.0, 1.0))) self.assertEqual( math_2d.get_projection_vectors((-1.0, 0.0), (0.0, -1.0)), ((0.0, 0.0), (0.0, -1.0)))
def test_perpendicular_vectors(self): self.assertEqual(math_2d.get_projection_vectors((1.0, 0.0), (1.0, 0.0)), ((1.0, 0.0), (0.0, 0.0))) self.assertEqual(math_2d.get_projection_vectors((1.0, 0.0), (-1.0, 0.0)), ((-1.0, 0.0), (0.0, 0.0))) self.assertEqual(math_2d.get_projection_vectors((1.0, 0.0), (0.0, 1.0)), ((0.0, 0.0), (0.0, 1.0))) self.assertEqual(math_2d.get_projection_vectors((1.0, 0.0), (0.0, -1.0)), ((0.0, 0.0), (0.0, -1.0))) self.assertEqual(math_2d.get_projection_vectors((-1.0, 0.0), (1.0, 0.0)), ((1.0, 0.0), (0.0, 0.0))) self.assertEqual(math_2d.get_projection_vectors((-1.0, 0.0), (-1.0, 0.0)), ((-1.0, 0.0), (0.0, 0.0))) self.assertEqual(math_2d.get_projection_vectors((-1.0, 0.0), (0.0, 1.0)), ((0.0, 0.0), (0.0, 1.0))) self.assertEqual(math_2d.get_projection_vectors((-1.0, 0.0), (0.0, -1.0)), ((0.0, 0.0), (0.0, -1.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)