点到线的距离

新手上路,请多包涵

我创建了一个“点”类,我想计算给定点和一条线(以其他 2 个点为特征)之间的最短距离,所有点都是已知的。我尝试使用这个公式:|Ax+By+C| / sqrt(A^2+B^2) ,但我搞砸了,一分钟变得更加困惑(主要是因为数学公式 :( )…

我确实找到了一些人们也问过这个问题的网站,但它要么不是针对 Python 的,要么是在 3D 系统中而不是 2D …

下面是我的课:

 class Point:
        def __init__(self,initx,inity):
            self.x = initx
            self.y = inity
        def getX(self):
            return self.x
        def getY(self):
            return self.y
        def __str__(self):
            return "x=" + str(self.x) + ", y=" + str(self.y)
        def distance_from_point(self,the_other_point):
            dx = the_other_point.getX() - self.x
            dy = the_other_point.getY() - self.y
        def slope(self,other_point):
            if self.x - other_point.getX() == 0 :
                return 0
            else:
                panta = (self.y - other_point.getY())/ (self.x - other_point.getX())
                return panta

有人可以帮我写一个单独的函数或方法来做我想要的吗?我试了2个小时,我想不通…

原文由 ROBlackSnail 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 890
2 个回答

你应该能够直接从点中使用 这个 公式。所以,你会有这样的东西:

 import math

class Point:
    def distance_to_line(self, p1, p2):
        x_diff = p2.x - p1.x
        y_diff = p2.y - p1.y
        num = abs(y_diff*self.x - x_diff*self.y + p2.x*p1.y - p2.y*p1.x)
        den = math.sqrt(y_diff**2 + x_diff**2)
        return num / den

原文由 Iluvatar 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过 pip 安装 FastLine ,然后以这种方式使用它:

 from FastLine import Line
# define a line by two points
l1 = Line(p1=(0,0), p2=(10,10))
# or define a line by slope and intercept
l2 = Line(m=0.5, b=-1)

# compute distance
d1 = l1.distance_to((20,50))
# returns 21.213203435596427
d2 = l2.distance_to((-15,17))
# returns 22.807893370497855

原文由 M.Ali Zarrinzade 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题