Esempio n. 1
0
    def dist_to(self, p: Point) -> float:
        dotA = (p.x - self.a.x) * (self.b.x - self.a.x) + (p.y - self.a.y) * (self.b.y - self.a.y)

        if dotA <= 0:
            return self.a.get_distance(p)

        dotB = (p.x - self.b.x) * (self.a.x - self.b.x) + (p.y - self.b.y) * (self.a.y - self.b.y)

        if dotB <= 0:
            return self.b.get_distance(p)

        closest_point = self.a + ((self.b - self.a) * dotA) / (dotA + dotB)

        return p.distance_to(closest_point)
Esempio n. 2
0
 def test_distance_same_value_point(self):
     p = Point(1.0, 0.0)
     self.assertEqual(p.distance_to(Point(1.0, 0.0)), 0.0)
Esempio n. 3
0
 def test_distance_conmutative(self):
     p1 = Point(1.0, 1.0)
     p2 = Point(-1.0, -1.0)
     self.assertEqual(p1.distance_to(p2), p2.distance_to(p1))
Esempio n. 4
0
 def test_distance_same_x(self):
     p = Point(0.0, 1.0)
     self.assertEqual(p.distance_to(Point(0.0, -1.0)), 2.0)
Esempio n. 5
0
 def test_distance_same_y(self):
     p = Point(1.0, 0.0)
     self.assertEqual(p.distance_to(Point(-1.0, 0.0)), 2.0)