【发布时间】:2021-11-05 02:28:09
【问题描述】:
给定一条坐标为'start'和'end'的线以及点'pnt'的坐标,找出从pnt到线的最短距离。我试过下面的代码。
import math
def dot(v,w):
x,y,z = v
X,Y,Z = w
return x*X + y*Y + z*Z
def length(v):
x,y,z = v
return math.sqrt(x*x + y*y + z*z)
def vector(b,e):
x,y,z = b
X,Y,Z = e
return (X-x, Y-y, Z-z)
def unit(v):
x,y,z = v
mag = length(v)
return (x/mag, y/mag, z/mag)
def distance(p0,p1):
return length(vector(p0,p1))
def scale(v,sc):
x,y,z = v
return (x * sc, y * sc, z * sc)
def add(v,w):
x,y,z = v
X,Y,Z = w
return (x+X, y+Y, z+Z)
def pnt2line(pnt, start, end):
line_vec = vector(start, end)
pnt_vec = vector(start, pnt)
line_len = length(line_vec)
line_unitvec = unit(line_vec)
pnt_vec_scaled = scale(pnt_vec, 1.0/line_len)
t = dot(line_unitvec, pnt_vec_scaled)
if t < 0.0:
t = 0.0
elif t > 1.0:
t = 1.0
nearest = scale(line_vec, t)
dist = distance(nearest, pnt_vec)
nearest = add(nearest, start)
return (dist, nearest)
【问题讨论】:
-
如果您可以提供一些示例输入/输出和您的尝试,可能会更有帮助。
-
什么是“点”? x,y? x,y,z?
-
它是一个二维空间,(x,y)
-
你能说明这段代码在二维空间中是如何工作的吗?
-
“我已经尝试了下面的代码。”:我们为你感到高兴,但你的问题是什么?
标签: python math geometry coordinates