python-3.x 点到直线的距离

enxuqcxy  于 2022-12-05  发布在  Python
关注(0)|答案(4)|浏览(207)

我创建了一个类“点”,我想计算一个给定的点和一条线(由2个其他点表征)之间的最短距离,所有的点都是已知的。我尝试使用这个公式:|轴+按+C|/ sqrt(A^2+B^2),但我搞砸了,越来越困惑(主要是因为数学公式:()...
我确实找到了一些网站,人们也问了这个问题,但它要么不是为Python,要么是在一个三维系统中而不是二维系统中...

下面是我的课:

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个小时,我不能弄清楚...

ukxgm1gy

ukxgm1gy1#

你应该可以直接从这些点来使用这个公式,所以,你会得到这样的结果:

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
2guxujil

2guxujil2#

两点间的距离公式为Distance =sqrt((x2−x1)^2+(y2−y1)^2),计算坡度的公式为slope = (y2 - y1) / (x2 - x1)
所以下面是一个简单的计算距离的方法

def distance_from_other_point(self, other_point):
    return math.sqrt( ( other_point.getX() - self.getX() )**2 + ( other_point.getY() - self.getY() )**2 )

def slope(self, otehr_point):
   return ( other_point.getY() - self.getY() )*1.0 / ( other_point.getX() - self.getX() )

在第二个方法中,slope,我乘以1.0,结果是float。注意-我使用了python 2.7.6的语法,尽管希望它在python 3.x中也能工作。

hfyxw5xn

hfyxw5xn3#

您可以通过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
6ss1mwsb

6ss1mwsb4#

它是

Q-P0 = α (P1-P0) + β k×(P1-P0)

其中k×(P1-P0)z向量与位置向量之间的向量乘积。
把上面的方程写成标量系统,我们有

ΔX = α dx - β dy
ΔY = α dy + β dx

求解α,β

(dx²+dy²) α = + ΔX dx + ΔY dy
(dx²+dy²) β = - ΔX dy + ΔY dx

因为(dx²+dy²) = |P1-P0|²

ΔY dx - ΔX dy
β |P1-P0| = distance = ---------------
                            |P1-P0|

当然,我们的结果等价于(P1-P0)×(Q-P0)/|P1-P0|
最后一点,Q(P1-P0)的距离是有方向的,也许你需要距离的绝对值。

相关问题