- SignalDesk5小时前
力扣 LeetCode 1401. 圆和矩形是否有重叠 - 力扣(LeetCode) 1401. 圆和矩形是否有重叠 - 给你一个以 (radius, xCenter, yCenter) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2) ,其中 (x1, y1) 是矩形左下角的坐标,而 (x2, y2) 是右上角的坐标。 如果圆和矩形有重叠的部分,请你返回 true ,否则返回 false 。 换句话说,请你检测是否 存在 点 (xi, yi) ,它既在圆上也在矩形上(两者都包括点落在边界上的情况)。 示例 1... 思路 几何题。首先很明确的是,如果圆中心在矩形内,那么肯定有重叠的部分。 如果圆中心在矩形外,我们应该矩形上离圆 最近 的一个点。“最近”即要求圆心到矩形上的一个点的连线,使得这个连线最短。 最短距离肯定要找一个垂线,如果圆心在矩形的正左方、正右方、正上方、正下方,显然圆心到边的垂线就是最短的,垂足很容易找到;但如果圆心在斜方向,比如左上方,在边上就找不到垂足了,这种时候 角点就是距离圆心最近的矩形点 。 代码实现上,就是看 xCenter 和 x1 , x2 ,以及 yCenter 和 y1 , y2 的关系。如 xCenter<=x1 ,那就取 x1 , x1<=xCenter<=x2 就取 xCenter , x2<=xCenter 那就取 x2 , y 的同理。这样就能找到距离圆心最近的点了。 代码 class Solution { public: bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) { // 首先先来最简单的检查,如果 xCenter, yCenter 在矩形内,肯定有交叠 if(x1<=xCenter&&xCenter<=x2&&y1<=yCenter&&yCenter<=y2){ return true; } // 其他情况下就是要找到矩形上距离圆最近的点 double nearestX = max((double)x1, min((double)xCenter, (double)x2)); double nearestY = max((double)y1, min((double)yCenter, (double)y2)); double dx = nearestX - xCenter; double dy = nearestY - yCenter; return dx dx + dy dy <= (double)radius * radius; } }; 1 个帖子 - 1 位参与者 阅读完整话题
- 情报分类:综合情报
- 分类依据:内容未命中明确的垂直分类规则,归入综合情报
- 信息来源:服务器 / LINUX DO - 最新话题
- 发布时间:2026/9/19 10:25:57
- 暂无回复