判断某个点是否在矩形范围内

pre

  • 一个业务需求,45°俯视角的游戏场景如果用正方向矩形拉范围视觉上是个菱形
  • 这时候需要用到45°矩形

判断某个点是否在矩形内

1
2
3
4
struct point {
int x = -1;
int y = -1;
};

正方向矩形

  • 需要2个point: left_topright_down
  • 只需要检查目标点 pt
    1
    2
    pt.x >= left_top.x && pt.y >= left_top.y
    && pt.x <= right_down.x && pt.y <= right_down.y

方向矩形

画图理解:

  • 假设是正方向的矩形

  • 贯穿全文的公式:

    • 向量 a ⋅ b = |a|*|b|*cos(角度)
  • cos(角度) 对应值:

  • 公式里两个 > 0 的是由 cos 的正负决定的

    • AM ⋅ AB >= 0 表示点在 y 轴左边 (1,2象限)
    • AM ⋅ AD >= 0 表示点在 x 轴上面 (1,3象限)
      向量象限
    • 重合的就是 1 象限
  • AM ⋅ AB < AB ⋅ AB:

    • AM ⋅ AB = |AM| |AB| cos(角度)
    • AB ⋅ AB = |AB| |AB| cos(0) = |AB| |AB|
    • |AM| |AB| cos(角度) < |AB| |AB| cos(0) 得出
    • |AM| cos(角度) < |AB|


- 图里 A 代表 AM, B 代表 AB

  • AM ⋅ AD < AD ⋅ AD 同理

参考

------ 本文结束 ------
------ 版权声明:转载请注明出处 ------