def test_small_to_large(self): c0 = aphex.Circle(x=160, y=450, r=30) c1 = aphex.Circle(x=500, y=100, r=65) result = aphex.tangent(c0, c1, aphex.RIGHT, aphex.RIGHT) expected = aphex.Segment(x0=179.96358510145777, y0=472.3931969557018, x1=543.2544343864918, y1=148.51859340402063) self.assertEqual(result, expected)
def test_outer(self): c0 = aphex.Circle(0, 0, 4) c1 = aphex.Circle(5, 5, 3) result_ll = aphex.tangent(c0, c1, aphex.LEFT, aphex.LEFT) result_rr = aphex.tangent(c0, c1, aphex.RIGHT, aphex.RIGHT) expected_ll = aphex.Segment(3.2, -2.4, 7.4, 3.2) expected_rr = aphex.Segment(-2.4, 3.2, 3.2, 7.4) self.assertEqual(result_ll, expected_ll) self.assertEqual(result_rr, expected_rr)
def test_outer_same_r(self): c0 = aphex.Circle(0, 0, 2) c1 = aphex.Circle(5, 5, 2) result_ll = aphex.tangent(c0, c1, aphex.LEFT, aphex.LEFT) result_rr = aphex.tangent(c0, c1, aphex.RIGHT, aphex.RIGHT) expected_ll = aphex.Segment(1.414213562373095, -1.414213562373095, 6.414213562373095, 3.585786437626905) expected_rr = aphex.Segment(-1.414213562373095, 1.414213562373095, 3.585786437626905, 6.414213562373095) self.assertEqual(result_ll, expected_ll) self.assertEqual(result_rr, expected_rr)
def test_right_to_left(self): # c0 is bigger c0 = aphex.Circle(0, 0, 4) c1 = aphex.Circle(10, 0, 3) result_rl = aphex.tangent(c0, c1, aphex.RIGHT, aphex.LEFT) self.assertGreater(result_rl.y0, result_rl.y1) # c1 is bigger c0 = aphex.Circle(0, 0, 3) c1 = aphex.Circle(10, 0, 4) result_rl = aphex.tangent(c0, c1, aphex.RIGHT, aphex.LEFT) self.assertGreater(result_rl.y0, result_rl.y1)
def test_inner(self): c0 = aphex.Circle(0, 0, 4) c1 = aphex.Circle(5, 5, 3) result_lr = aphex.tangent(c0, c1, aphex.LEFT, aphex.RIGHT) result_rl = aphex.tangent(c0, c1, aphex.RIGHT, aphex.LEFT) expected_lr = aphex.Segment( 3.2, 2.4, 2.600000000000001, 3.1999999999999993, ) expected_rl = aphex.Segment(2.4, 3.2, 3.1999999999999993, 2.600000000000001) self.assertEqual(result_lr, expected_lr) self.assertEqual(result_rl, expected_rl)
def test_compute_center(self): tests = [ ([ aphex.Circle(0, 0, 4), aphex.Circle(5, 5, 3), ], (2.5, 2.5)), ([ aphex.Circle(0, 0, 3), aphex.Circle(5, 5, 3), aphex.Circle(-5, -5, 3), ], (0, 0)), ([ aphex.Circle(0, 0, 3), aphex.Circle(6, 5, 3), aphex.Circle(0, 1, 3), ], (2, 2)), ] for (circles, expected) in tests: self.assertEqual(aphex.compute_center(circles), expected)