Leetcode 第23场双周赛C 5361. 圆和矩形是否有重叠 (计算几何 初中数学)

时间:2022-07-26
本文章向大家介绍Leetcode 第23场双周赛C 5361. 圆和矩形是否有重叠 (计算几何 初中数学),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

5361. 圆和矩形是否有重叠

给你一个以 (radius, x_center, y_center) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。

如果圆和矩形有重叠的部分,请你返回 True ,否则返回 False 。

换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。

示例 1:

输入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
输出:true
解释:圆和矩形有公共点 (1,0) 

示例 2:

输入:radius = 1, x_center = 0, y_center = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
输出:true

示例 3:

输入:radius = 1, x_center = 1, y_center = 1, x1 = -3, y1 = -3, x2 = 3, y2 = 3
输出:true

示例 4:

输入:radius = 1, x_center = 1, y_center = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1
输出:false

提示:

  • 1 <= radius <= 2000
  • -10^4 <= x_center, y_center, x1, y1, x2, y2 <= 10^4
  • x1 < x2
  • y1 < y2

判断圆心到正方形中心距离是否大于等于正方形对角线一半+圆的半径,如果是,则不相交,否则相交

class Solution {
public:
    bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {
        double  x=(x1+x2)/2.0,y=(y1+y2)/2.0;
        return (x-x_center)*(x-x_center)+(y-y_center)*(y-y_center)<=(radius+sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)))*(radius+sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)));
    }
};