有没有一个简单的公式来计算这个?我一直在研究一些数学,但我只能找到一种方法来计算指向盒子中心的距离,而不是指向最近的点..有关于这个问题的一些资源吗?
最佳答案
这是一个避免所有案例逻辑的公式。 (我现在正好在 JS 中工作,所以这是一个 JS 实现)。让 rect = {max:{x:_, y:_}, min:{x:_, y:_}}
和 p={x:_, y:_}
function distance(rect, p) {
var dx = Math.max(rect.min.x - p.x, 0, p.x - rect.max.x);
var dy = Math.max(rect.min.y - p.y, 0, p.y - rect.max.y);
return Math.sqrt(dx*dx + dy*dy);
}
解释:
这将问题分解为计算 x 距离
dx
和 y 距离 dy
.然后它使用距离公式。用于计算
dx
,这是它的工作原理。 ( dy
类似)查看提供给 max 函数的元组:
(min-p, 0, p-max)
.让我们指定这个元组 (a,b,c)
.如果 p 是 min 的左边,那么我们有 p < min < max,这意味着元组将评估为
(+,0,-)
,因此 max 函数将正确返回 a = min - p
.如果 p 在 min 和 max 之间,那么我们有 min < p < max,这意味着元组将评估为
(-,0,-)
.同样,max 函数将正确返回 b = 0
.最后,如果 p 在 max 的右边,那么我们有, min < max < p,并且元组计算为
(-,0,+)
. Math.max 再次正确返回 c = p - max
.所以结果证明所有的 case 逻辑都由 Math.max 处理,这导致了一个很好的 3 行、无控制流函数。
关于3d - 计算点和矩形框(最近点)之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254838/