圆和矩形是否有重叠

news2025/1/12 15:44:23

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->圆和矩形是否有重叠

问题描述

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

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

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

示例 1 :

输入: radius = 1, xCenter = 0, yCenter = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
输出: true
解释: 圆和矩形存在公共点 (1,0) 。

示例 2 :

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

示例 3 :

输入: radius = 1, xCenter = 0, yCenter = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
输出: true

提示:

  • 1 <= radius <= 2000
  • -10^4 <= xCenter, yCenter <= 10^4
  • -10^4 <= x1 < x2 <= 10^4
  • -10^4 <= y1 < y2 <= 10^4

思路分析

首先我们应该要先理解一下题目意思,题目会给我们一个圆形和一个矩形的相关信息,我们需要判断给出的矩形和圆形是否会有重叠的部分,首先我们先分析一下矩形和圆形可能存在的位置情况:

  • 1、包含关系

矩形包含圆形或者圆形包含矩形,如下图:

image.png

  • 2、相切

内切的时候也是包含关系,所以这里只看外切的情况,如下图:

image.png

  • 3、相交

矩形和圆形有重叠部分,如下图:

image.png

  • 4、相离

矩形和圆形没有重叠部分,如下图:

image.png

我们再分析一下上面得出的4种情况,因为题目中说到包括点落在边界上的情况,所以相切时候的切点也算作是重叠的部分,也就是说1、2、3这三种情况都是满足题目条件的,这几种情况我们都可以通过圆心到矩形边上的距离来区分。

  • 圆心位于矩形的四边之间

x1 < xCenter < x2 && y1 < yCenter < y2,这时候肯定是包含关系或者相交关系,即一定符合题目要求,两个图形有重叠的部分。

  • 圆心位于矩形的四边之外

这时候圆形和矩形可能存在两种位置关系:相交或相离。我们可以通过计算圆心到矩形边上的距离来区分这两种位置情况:

如果圆心到矩形边上距离大于等于半径时,说明两个图形是相离的;

如果圆心到矩形边上的距离小于半径时,说明两个图形是相交的;

AC 代码

完整 AC 代码如下:

/**
 * @param {number} radius
 * @param {number} xCenter
 * @param {number} yCenter
 * @param {number} x1
 * @param {number} y1
 * @param {number} x2
 * @param {number} y2
 * @return {boolean}
 */
var checkOverlap = function (radius, xCenter, yCenter, x1, y1, x2, y2) {
  let dist = 0;
  if (xCenter < x1 || xCenter > x2) {
    dist += Math.min(Math.pow(x1 - xCenter, 2), Math.pow(x2 - xCenter, 2));
  }
  if (yCenter < y1 || yCenter > y2) {
    dist += Math.min(Math.pow(y1 - yCenter, 2), Math.pow(y2 - yCenter, 2));
  }
  return dist <= radius ** 2;
};

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android设计模式—桥接模式

1.桥接模式 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离来解耦。它使用接口作为桥梁&#xff0c;将一个抽象类与其实现类的代码独立开来&#xff0c;从而使它们可以各自独立地变化。桥接模式的核心思想是“组合优于继承”。 简单来讲&#xff0…

RecyclerView性能优化之异步预加载

RecyclerView性能优化之异步预加载 前言 首先需要强调的是&#xff0c;这篇文章是对我之前写的《浅谈RecyclerView的性能优化》文章的补充&#xff0c;建议大家先读完这篇文章后再来看这篇文章&#xff0c;味道更佳。 当时由于篇幅的原因&#xff0c;并没有深入展开讲解&…

【TCP/IP】广播 - 定义、原理及编程实现

目录 广播 广播的原理及形式 广播的编程与实现 套接字选项设置 发送者 接收者 拓展资料 广播 广播(Broadcast)是指封包在计算机网络中传输时&#xff0c;目的地址为网络中所有设备的一种传输方式。这里所说的“所有设备”也被限定在一个范围之中&#xff0c;这个范围被称…

Android 13(T) - binder阅读(4)- 使用ServiceManager注册服务2

上一篇笔记我们看到了binder_transaction&#xff0c;这个方法很长&#xff0c;这一篇我们将把这个方法拆分开来看binder_transaction做了什么&#xff0c;从而学习binder是如何跨进程通信的。 1 binder_transaction static void binder_transaction(struct binder_proc *proc…

Java 面试知识点合集

一、基础篇 1.1 java基础 1.面向对象的特征&#xff1a;封装、继承、多态 (1).封装&#xff1a;属性能够描述事物的特征&#xff0c;方法能够描述事物的动作。封装就是把同一类事物的共性&#xff08;包括属性和方法&#xff09;归到同一类中&#xff0c;方便使用。 封装的…

音视频处理工具FFmpeg与Java结合的简单使用

一、什么是FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证高可移植性和编解…

chatgpt赋能python:Python编写n!——让阶乘计算变得更简单

Python编写n!——让阶乘计算变得更简单 阶乘是高中数学中常见的运算&#xff0c;它的含义是从1到n的所有正整数相乘&#xff0c;用叹号表示为n!。例如&#xff0c;5! 1 2 3 4 5 120。在计算机编程中&#xff0c;我们常常需要计算阶乘。而Python作为一门便捷易用的编程语…

chatgpt赋能python:Python编程自动化办公–提升工作效率的利器

Python编程自动化办公 – 提升工作效率的利器 越来越多企业对协作和业务流程的优化提高了要求&#xff0c;自动化办公就是其中之一&#xff0c;而Python编程能够帮助我们实现高效自动化办公。Python是一种多用途&#xff0c;高效的编程语言&#xff0c;被广泛应用于应用程序开…

UE4/5动画系列(3.通过后期处理动画蓝图的头部朝向Actor,两种方法:1.通过动画层接口的look at方法。2.通过control rig的方法)

目录 蓝图 点积dot Yaw判断 后期处理动画蓝图 动画层接口 ControlRig: 蓝图 首先我们创建一个actor类&#xff0c;这个actor类是我们要看的东西&#xff0c;actor在哪&#xff0c;我们的动物就要看到哪里&#xff08;同样&#xff0c;这个我们也是做一个父类&#xff0…

chatgpt赋能python:Python程序员的秘密武器:给不及格成绩加分

Python程序员的秘密武器&#xff1a;给不及格成绩加分 Python是一个语法简洁、易学易用的编程语言&#xff0c;已经成为了很多程序员的首选语言。在学校中&#xff0c;很多学生选择学习Python作为他们的编程课程。然而&#xff0c;有时候即便是刻苦学习&#xff0c;踏实地完成…

3D定制化开发工具HOOPS如何满足EDA设计需求?(上)

HOOPS SDK 是由 Tech Soft 3D 公司开发和提供的一款软件开发工具包。HOOPS SDK 为开发者提供了强大的3D图形渲染和交互功能&#xff0c;用于构建高性能的工程、设计和制造应用程序。其主要功能包括&#xff1a;3D 图形渲染、交互性、数据管理、算法和分析、可定制性等。 HOOPS…

chatgpt赋能python:Python编写一个可以颠倒数组元素的函数

Python编写一个可以颠倒数组元素的函数 在Python编程中&#xff0c;我们经常需要对列表&#xff08;即数组&#xff09;进行操作。其中一个常见的操作就是颠倒列表中各元素的排列顺序。这个操作在很多场景下都有用&#xff0c;例如逆序输出字符串、逆序遍历二叉树等等。在本篇…

Atlas 200I DK A2开发者套件通过路由器联网(360安全路由-V2)

一、参考资料 Windows系统 通过直连路由器连接外部网络 二、准备工作 准备micro SD存储卡&#xff0c;即TF卡&#xff0c;建议128GB以上&#xff1b;准备micro SD读卡器&#xff1b;准备普通网线一根&#xff1b;准备一个路由器&#xff0c; 360安全路由-V2路由器。 三、关键…

机器人开发--SLAM详细介绍

机器人开发--SLAM介绍 1 介绍1.1 概述1.2 发展历程三个时代重要时间节点视觉SLAM分类及里程碑技术发展 1.3 SLAM与各模块关系1.5 SLAM分类1.4 应用领域 2 SLAM框架视觉/惯性SLAM系统框架结构经典框架 3 常见方案3.1 常见激光雷达方案3.2 常见视觉方案3.3 多传感器融合方案 4 地…

chatgpt赋能python:Python中同一变量多次赋值的探讨

Python中同一变量多次赋值的探讨 介绍 Python是一种非常流行的编程语言&#xff0c;具有易于学习和使用、强大的功能和可扩展性、广泛的应用领域等众多优点。在Python中&#xff0c;我们可以对同一变量多次进行赋值&#xff0c;这在某些情况下非常有用。本文将探讨在Python中…

2.3、Bean的管理

一、Bean的装配&#xff08;IOC应用实现&#xff09; 创建应用组件之间的协作的行为通常称为装配&#xff08;wiring&#xff09;。Spring IOC通过应用上下文&#xff08;ApplicationContext&#xff09;装载Bean的定义并把他们组装起来。 Spring应用上下文&#xff08;Applica…

yum安装LNMP

目录 前言 一、yum安装要用在线yum源 二、安装Nginx 1、搭建Nginx环境 2、安装yum 3、查看Nginx是否安装成功 4、设置开机自启 三、安装MySQL 1、除系统中所有以"mariadb"开头的软件包 2、安装MySQL 3、设置开机自启 4、查看MySQL初始密码 5、修改MySQL密码…

第 107 场LeetCode双周赛

A 最大字符串配对数目 显然各字符串对 间匹配的先后顺序不影响最大匹配数目, 可以从后往前遍历数组, 判断前面是否有和当前末尾构成匹配的. class Solution { public:int maximumNumberOfStringPairs(vector<string> &words) {int res 0; while (words.size…

Python基础五

目录 一、Ptyhon数据类型--元组 1.元组的注意事项 2.元组的下标 3.访问元组元素 4.拼接元组 5.删除元组 6.元组运算符 二、Python内置函数--元组相关 一、Ptyhon数据类型--元组 Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改&#xff0c;也不能…

chatgpt赋能python:Python编写预警系统——保障企业安全的得力工具

Python编写预警系统——保障企业安全的得力工具 随着互联网应用的发展&#xff0c;企业所要面对的风险和威胁也与日俱增&#xff0c;预警系统的作用在保障企业安全中越来越显著。Python编写预警系统&#xff0c;成为了许多企业和团队的首选&#xff0c;具有方便快捷、灵活多样…