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

求outerSquare旋转A弧度后与innerSquare的最近距离

旋转后两正方形边界最近距离求解方法

现有两个方形视图outerSquare和innerSquare,外正方形初始左上角坐标为(x₁,y₁),内正方形左上角坐标为(x₂,y₂)。未旋转时,外正方形左边界与内正方形左边界的最近距离可直接用x₂ - x₁计算;但外正方形旋转A弧度后边界交叉,就得用下面的方法求解:

先明确关键参数

首先得确定外正方形的旋转中心,一般默认是自身几何中心:

  • 假设外正方形边长为L₁,初始中心坐标为(x₁ + L₁/2, y₁ + L₁/2)
  • 内正方形边长为L₂,中心坐标为(x₂ + L₂/2, y₂ + L₂/2)

核心逻辑:凸多边形最短距离计算

正方形属于凸多边形,两个凸多边形的最短距离,是以下三类情况的最小值:

  1. 一个多边形的顶点到另一个多边形边的最短距离
  2. 两个多边形顶点之间的最短距离
  3. 两个多边形边之间的最短距离

具体计算步骤

1. 算出外正方形旋转后的四个顶点坐标

绕中心(x₀,y₀)旋转A弧度的坐标变换公式(逆时针为正,顺时针为负):

x' = (x - x₀) * cos(A) - (y - y₀) * sin(A) + x₀
y' = (x - x₀) * sin(A) + (y - y₀) * cos(A) + y₀

外正方形的四个初始顶点:

  • 左上角:(x₁, y₁)
  • 右上角:(x₁ + L₁, y₁)
  • 右下角:(x₁ + L₁, y₁ + L₁)
  • 左下角:(x₁, y₁ + L₁)
    把这四个点代入公式,就能得到旋转后的顶点坐标。

2. 遍历计算所有候选距离

(1)外顶点到内正方形边的距离

把内正方形的四条边看作线段,比如上边是y=y₂,x∈[x₂, x₂+L₂],右边是x=x₂+L₂,y∈[y₂, y₂+L₂]等。计算点到线段的最短距离规则:

  • 先看点在这条线段上的投影是否在线段范围内:在的话取垂直距离;不在的话取点到线段两个端点的距离最小值。
(2)内顶点到外正方形边的距离

用旋转后的外正方形四条线段,按同样方法计算内正方形四个顶点到这些线段的最短距离。

(3)所有顶点间的直线距离

计算外正方形4个顶点和内正方形4个顶点之间的欧氏距离,取其中最小值。

(4)两条边之间的最短距离

对两个正方形的每一组线段,计算它们的最短距离:如果线段相交,距离为0;不相交的话,取其中一条线段的端点到另一条线段的距离最小值。

3. 取最小值得最终结果

把上面所有计算出的距离放在一起,最小的那个就是旋转后两正方形的最近距离。

特殊情况

  • 如果两个正方形重叠(比如一个顶点在对方内部,或者边相交),直接判定最短距离为0。
  • 当旋转角度为0时,这个方法会自动退化为初始的x₂ - x₁(内正方形在外正方形右侧的情况),验证方法有效。

内容的提问来源于stack exchange,提问作者Parmar Abhishek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:42:37