我有一个 3D 空间,其中位置存储为元组,例如:
(2, 0.5, -4)
。如果我想知道两点之间的距离,我只需做dist = (abs(x1 -x2), abs(y1 - y2), abs(z1 - z2))
,如果我想要半径distf = (dist[0] + dist[1] + dist[2]) / 3
。现在我有每个框由两个最小/最大位置定义(例如:(-4 8 -16)
到(4, 12, 6)
),我想知道我的点到最近的点之间的距离:什么是知道到最近点的距离的最简单方法面向所有 3 个方向,或者如果该位置位于盒子内,则为 0?只是寻找最轻的解决方案,除了像 math
这样的默认值之外,不需要 numpy 或库,因为我没有在我的项目中使用这些。
这是我混乱的解决方案,可能应该有效,但我想知道是否有更好的。
point = (8, 12, 16)
box_min = (-4, -4, -4)
box_max = (4, 4, 4)
box_center = ((box_min[0] + box_max[0]) / 2, (box_min[1] + box_max[1]) / 2, (box_min[2] + box_max[2]) / 2)
box_scale = (abs(box_max[0] - box_min[0]), abs(box_max[1] - box_min[1]), abs(box_max[2] - box_min[2]))
dist = (abs(box_center[0] - point[0]) + box_scale[0] / 2, abs(box_center[1] - point[1]) + box_scale[1] / 2, abs(box_center[2] - point[2]) + box_scale[2] / 2)
您可以使用
(dx ** 2 + dy ** 2 + dz ** 2) ** 0.5
来计算距离:
def _dist(A, B, C):
dx = max(B[0] - A[0], 0, A[0] - C[0])
dy = max(B[1] - A[1], 0, A[1] - C[1])
dz = max(B[2] - A[2], 0, A[2] - C[2])
return (dx ** 2 + dy ** 2 + dz ** 2) ** 0.5
print(_dist((8, 12, 16), (-4, -4, -4), (4, 4, 4)))
14.966629547095765