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