C++ 中圆和矩形的重叠

c++server side programmingprogramming

假设我们有一个圆,表示为 (radius, xc, yc),这里 (xc, yc) 是圆的中心坐标。我们还有一个轴对齐的矩形,表示为 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是矩形右上角的坐标。我们必须检查圆和矩形是否重叠。

因此,如果输入如下

则输出为 true。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 eval(),它将采用 a、b、c,

  • 返回 b 的最大值以及 a 和 c 的最小值

  • 从主方法中,执行以下操作 −

  • cdx := eval(cx, left, right), cdy := eval(cy, bottom, top)

  • rwid := right - left, rh := top - bottom

  • dx := cx - cdx, dy := cy - cdy

  • disSq := (dx * dx) + (dy * dy)

  • sqrRadius := (r * r)

  • 当 disSq <= sqrRadius 时返回 true,否则返回 false

示例

让我们看看下面的实现以便更好地理解 −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int eval(int a, int b, int c){
      return max(b, min(a, c));
   }
   bool checkOverlap(int r, int cx, int cy, int left, int bottom, int right, int top){
      double cdx = eval(cx, left, right);
      double cdy = eval(cy, bottom, top);
      double rwid = right - left;
      double rh = top - bottom;
      double dx = cx - cdx;
      double dy = cy - cdy;
      double disSq = (dx * dx) + (dy * dy);
      double sqrRadius = (r * r);
      return (disSq <= sqrRadius);
   }
};
main(){
   Solution ob;
   cout << (ob.checkOverlap(1, 0, 0, 1, -1, 3, 1));
}

输入

1, 0, 0, 1, -1, 3, 1

输出

1

相关文章