代码之家  ›  专栏  ›  技术社区  ›  MirceaKitsune

获取从一个点到最近长方体的距离

  •  1
  • MirceaKitsune  · 技术社区  · 1 年前

    我有一个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?只是在寻找最轻的解决方案,它不需要numpy或默认库以外的库,比如 math 因为我没有在我的项目中使用这些。

    这是我混乱的解决方案,可能会奏效,但我想知道是否还有更好的方法。

    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)
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   user24714692    1 年前

    您可以使用 (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
    
    
    def _dist_b(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, dy, dz)
    
    
    print(_dist((8, 12, 16), (-4, -4, -4), (4, 4, 4)))
    print(_dist_b((8, 12, 16), (-4, -4, -4), (4, 4, 4)))
    
    

    打印

    14.966629547095765
    (4, 8, 12)