21xrx.com
2024-12-22 22:35:15 Sunday
登录
文章检索 我的文章 写文章
C++如何判断一个点是否在矩形内部?
2023-06-27 22:22:13 深夜i     --     --
C++ 判断 矩形 内部

在C++中,判断一个点是否在矩形内部是一个比较常见的问题,下面介绍两种方法。

方法一:使用矩形的左上角和右下角两个点坐标比较

假设矩形的左上角坐标为(x1, y1),右下角坐标为(x2, y2),点的坐标为(x, y),那么只需要判断点的横坐标是否在x1和x2之间,纵坐标是否在y1和y2之间,即可判断点是否在矩形内部,示例代码如下:


bool isPointInRect(int x1, int y1, int x2, int y2, int x, int y)

{

  return (x >= x1 && x <= x2 && y >= y1 && y <= y2);

}

方法二:使用向量叉积

假设矩形的四个顶点坐标为p1(x1, y1), p2(x2, y1), p3(x2, y2), p4(x1, y2),点的坐标为(x, y),将该点与矩形的每个顶点分别构成两个向量,用这两个向量求出一个叉积,如果满足以下三个条件,则证明点在矩形内部:

1. 该点与矩形每个顶点对应求出的向量叉积值大于0;

2. 点与相邻两个顶点的向量叉积但凡有一个小于0;

3. 以上两个条件都满足,说明该点在矩形内部。

示例代码如下:


bool isPointInRect(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x, int y)

{

  int vec1x = x1 - x;

  int vec1y = y1 - y;

  int vec2x = x2 - x;

  int vec2y = y2 - y;

  int vec3x = x3 - x;

  int vec3y = y3 - y;

  int vec4x = x4 - x;

  int vec4y = y4 - y;

  int crossProduct1 = vec1x * vec2y - vec1y * vec2x;

  int crossProduct2 = vec2x * vec3y - vec2y * vec3x;

  int crossProduct3 = vec3x * vec4y - vec3y * vec4x;

  int crossProduct4 = vec4x * vec1y - vec4y * vec1x;

  if (crossProduct1 > 0 && crossProduct2 > 0 && crossProduct3 > 0 && crossProduct4 > 0)

    return true;

  if ((crossProduct1 < 0 && crossProduct2 < 0) || (crossProduct2 < 0 && crossProduct3 < 0) ||(crossProduct3 < 0 && crossProduct4 < 0) || (crossProduct4 < 0 && crossProduct1 < 0))

    return true;

  return false;

}

以上就是两种判断一个点是否在矩形内部的方法,选择哪种方法可以根据自己的代码实现情况进行选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复