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

给定旋转矩形的4个顶点,如何判断单点是否位于该矩形内部

旋转矩形的点包含检测实现方案

我们先统一约定输入参数的两种常见形式:

  • 形式1:待检测点P(x₀,y₀),矩形中心(cx, cy)、宽度w、高度h、绕中心旋转角度θ
  • 形式2:待检测点P(x₀,y₀),矩形按顺序排列的四个顶点A、B、C、D

下面是三种常用的实现方案:

方法1:坐标逆变换法(最推荐,性能最优)

核心思路是消除矩形的旋转偏移,把问题转换为简单的轴对齐矩形点检测:

  • 第一步:将待检测点相对于矩形中心做偏移,得到相对坐标 P1 = (x₀ - cx, y₀ - cy)
  • 第二步:对P1做逆旋转(旋转角度为-θ),得到矩形局部坐标系下的坐标P_local:
    x_local = P1.x * cosθ + P1.y * sinθ
    y_local = -P1.x * sinθ + P1.y * cosθ
    
  • 第三步:直接用轴对齐矩形的判断逻辑,满足以下条件即说明点在矩形内部(含边界):
    abs(x_local) ≤ w/2 且 abs(y_local) ≤ h/2
    

如果你的输入只有矩形四个顶点,可以先通过顶点计算所需参数:

  • 中心:cx = (Ax+Bx+Cx+Dx)/4,cy = (Ay+By+Cy+Dy)/4
  • 宽高:w = AB边长度,h = AD边长度
  • 旋转角:θ = atan2(By - Ay, Bx - Ax)(即AB边与x轴正方向的夹角)

该方法计算量极小,仅需要少量四则运算和三角函数调用,适合游戏碰撞检测、图形渲染等高频计算场景。

方法2:分离轴定理(SAT)法(通用性最强)

这是所有凸多边形包含/碰撞检测的通用标准方案,不需要提前计算角度、中心等参数,拿到四个顶点即可直接使用:

分离轴定理核心逻辑:两个凸图形不相交的充要条件是存在一条分离轴,使得两个图形在该轴上的投影无重叠。点属于特殊的凸图形,只需验证点和矩形的投影在所有必要轴上都重叠即可。

对于矩形来说,仅需要检测两条分离轴(矩形两条相邻边的法向量),步骤如下:

  • 取矩形的两个相邻边向量,比如AB和AD
  • 计算两个边向量的法向量,作为投影轴
  • 将矩形四个顶点和待检测点P分别投影到两个轴上
  • 若两个轴上,P的投影都落在矩形顶点的投影区间内部,即可判定点在矩形内

该方法可直接扩展到任意凸多边形的包含、碰撞检测场景,适配性极强。

方法3:面积求和法(仅适合原理学习,不推荐生产使用)

核心逻辑非常容易理解:如果点在矩形内部,那么点和矩形四条边分别组成的四个三角形的面积之和,等于矩形本身的总面积:

  • 先计算矩形ABCD的总面积S
  • 分别计算△PAB、△PBC、△PCD、△PDA四个三角形的面积之和S_sum
  • 若abs(S_sum - S) ≤ 浮点误差阈值(一般取1e-6~1e-8),即可判定点在矩形内部

该方法缺点明显:计算量大、浮点误差对结果影响高,仅适合学习原理使用,不推荐生产环境部署。

通用注意事项

所有涉及浮点计算的场景都需要设置合理的精度阈值,避免因为浮点运算精度损失导致的误判;如果需要严格区分「内部」和「边界」,只需将判断条件中的≤替换为<即可。


内容的提问来源于stack exchange,提问作者code writer 3000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:05