You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找平面中最邻近正交矩形的最优距离度量方法

寻找平面中最邻近正交矩形的最优距离度量方法

从你的描述来看,核心需求其实是计算源矩形的中心到另一个矩形的最近点的欧氏距离——这完全匹配你定义的“closest”:找到那个拥有离源中心最近的点(在其周长或内部)的矩形。之前用的两种方法都没直接命中这个核心,所以才会出现各种问题,下面具体拆解:

为什么之前的方法不适用?

  1. 中心欧氏距离:只比较两个矩形的中心位置,完全忽略了矩形的大小和实际覆盖范围。比如你提到的大矩形B可能实际离源中心更近,但因为它的中心远,这个距离会比小而远的E更大,显然不符合需求。
  2. Clear Spacing距离:这个度量的是两个矩形之间的“间隙大小”(重叠时为负),它描述的是两个矩形整体的接近程度,但不是源中心到目标矩形的单点距离。就像你说的F和G的情况,它们和源的间隙相同,但源中心到F、G的最近点距离可能完全不同,这个方法就没法区分。

正确的距离度量方法

我们需要直接计算源矩形中心到目标矩形的最近点的欧氏距离,具体可以这样落地:

假设:

  • 源矩形中心坐标为 $(x_s, y_s)$
  • 目标矩形的中心为 $(x_t, y_t)$,宽度为 $w_t$,高度为 $h_t$

步骤1:确定目标矩形的边界范围

先算出目标矩形的四个边界坐标:

  • 左边界:$x_{t-left} = x_t - \frac{w_t}{2}$
  • 右边界:$x_{t-right} = x_t + \frac{w_t}{2}$
  • 下边界:$y_{t-bottom} = y_t - \frac{h_t}{2}$
  • 上边界:$y_{t-top} = y_t + \frac{h_t}{2}$

步骤2:找到目标矩形上离源中心最近的点

根据源中心的位置,计算目标矩形上的最近点 $(n_x, n_y)$:

  • 对于x轴:如果 $x_s < x_{t-left}$,则最近x坐标是 $x_{t-left}$;如果 $x_s > x_{t-right}$,则最近x坐标是 $x_{t-right}$;如果源中心在目标矩形的x范围内,最近x坐标就是 $x_s$ 本身。
  • 对于y轴:如果 $y_s < y_{t-bottom}$,则最近y坐标是 $y_{t-bottom}$;如果 $y_s > y_{t-top}$,则最近y坐标是 $y_{t-top}$;如果源中心在目标矩形的y范围内,最近y坐标就是 $y_s$ 本身。

步骤3:计算欧氏距离

最后用这两个点的坐标计算欧氏距离:
$$d = \sqrt{(x_s - n_x)^2 + (y_s - n_y)^2}$$

这个方法能解决你遇到的所有问题:

  • B和E的场景:不管B的中心有多远,只要它的某个点离源中心更近,计算出的d就会比E小,完全符合你的“最近”定义。
  • F和G的场景:即使它们和源的clear spacing相同,源中心到F、G的最近点距离大概率不同,d会给出明确的大小关系,帮你区分哪个更近。
  • 重叠/包含的情况:如果源中心在目标矩形内部,d直接为0;如果两个矩形重叠但源中心不在目标内,d会计算出源中心到目标矩形边界的最短距离,也符合实际情况。

额外补充

如果你之后需求有变化(比如要找两个矩形之间的最小点距离,而不是源中心到目标的距离),那是另一个问题,但就你当前的需求而言,这个方法是最直接、最准确的,完全贴合你对“closest”的定义。

备注:内容来源于stack exchange,提问作者browser-bug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:24:35