3d 中点到线段的距离 (Python)
Distance from a point to a line segment in 3d (Python)
我正在寻找 Python 函数来计算从 3D 中的点(x_0、y_0、z_0)到直线 segment 由其端点 (x_1,y_1,z_1) 和 (x_2,y_2,z_2) 定义.
对于这个问题,我只找到了 2D 的解决方案。
在 3d 中找到从点到线的距离的解决方案,但不是到线段的距离,如下所示:
(图片取自)
这个答案改编自这里:
。
函数lineseg_dist
returns距离点p到线段[a,b]的距离。 p
、a
和 b
是 np.arrays。
import numpy as np
def lineseg_dist(p, a, b):
# normalized tangent vector
d = np.divide(b - a, np.linalg.norm(b - a))
# signed parallel distance components
s = np.dot(a - p, d)
t = np.dot(p - b, d)
# clamped parallel distance
h = np.maximum.reduce([s, t, 0])
# perpendicular distance component
c = np.cross(p - a, d)
return np.hypot(h, np.linalg.norm(c))
我正在寻找 Python 函数来计算从 3D 中的点(x_0、y_0、z_0)到直线 segment 由其端点 (x_1,y_1,z_1) 和 (x_2,y_2,z_2) 定义.
对于这个问题,我只找到了 2D 的解决方案。
在 3d 中找到从点到线的距离的解决方案,但不是到线段的距离,如下所示:
(图片取自
这个答案改编自这里:
函数lineseg_dist
returns距离点p到线段[a,b]的距离。 p
、a
和 b
是 np.arrays。
import numpy as np
def lineseg_dist(p, a, b):
# normalized tangent vector
d = np.divide(b - a, np.linalg.norm(b - a))
# signed parallel distance components
s = np.dot(a - p, d)
t = np.dot(p - b, d)
# clamped parallel distance
h = np.maximum.reduce([s, t, 0])
# perpendicular distance component
c = np.cross(p - a, d)
return np.hypot(h, np.linalg.norm(c))