Rectangle与Circle相交_java判断矩形和圆形是否相交-程序员宅基地

技术标签: JAVA  计算机视觉  图像处理  几何学  

计算矩形与圆形相交与否

**
 * 描述: 计算圆形与矩形之间图形相交工具类
 * User: YueXZ
 * DateTime: 2021/12/8 17:22
 * Version1.0.0
 */
public class ShapeAreaMathUtil {
    


    public static Boolean circleIsOverlap(Circle c1, Circle c2) {
    

        return Math.sqrt((c2.getCenterX() - c1.getCenterX()) * (c2.getCenterX() - c1.getCenterX()) + (c2.getCenterY() - c1.getCenterY()) * (c2.getCenterY() - c1.getCenterY()))
                < (c1.getRadius() + c2.getRadius());
    }

    //以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标 rec1 = [0,0,2,2], rec2 = [1,1,3,3]
    public static boolean isRectangleOverlap(double[] rec1, double[] rec2) {
    
        if (rec1[0] == rec1[2] || rec1[1] == rec1[3] || rec2[0] == rec2[2] || rec2[1] == rec2[3]) {
    
            return false;
        }
        return !(rec1[2] <= rec2[0] ||   // left
                rec1[3] <= rec2[1] ||   // bottom
                rec1[0] >= rec2[2] ||   // right
                rec1[1] >= rec2[3]);    // top
    }

    //其中 (x1, y1) 是矩形左下角的坐标,(x2, y2) 是右上角的坐标。
    public static boolean rectangleAndCircleIsOverlap(Double radius, Double x_center, Double y_center, Double x1, Double y1, Double x2, Double y2) {
    
        //判断圆是否在矩形内
        if (x1 <= x_center && x2 >= x_center && y1 <= y_center && y2 >= y_center)
            return true;
        //判断矩形的四个点是否在圆内
        if (Math.sqrt((x1 - x_center) * (x1 - x_center) + (y1 - y_center) * (y1 - y_center)) <= radius)
            return true;
        if (Math.sqrt((x1 - x_center) * (x1 - x_center) + (y2 - y_center) * (y2 - y_center)) <= radius)
            return true;
        if (Math.sqrt((x2 - x_center) * (x2 - x_center) + (y1 - y_center) * (y1 - y_center)) <= radius)
            return true;
        if (Math.sqrt((x2 - x_center) * (x2 - x_center) + (y2 - y_center) * (y2 - y_center)) <= radius)
            return true;
        //矩形的点不在圆内,但矩形与圆相交的情况
        if (y1 < y_center && y2 > y_center && ((Math.abs(x1 - x_center) <= radius || Math.abs(x2 - x_center) <= radius)))
            return true;
        return x1 < x_center && x2 > x_center && ((Math.abs(y1 - y_center) <= radius || Math.abs(y2 - y_center) <= radius));
    }

}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38270238/article/details/121797149

智能推荐

python输入小数报错_python学习之路之int()奇怪的报错-程序员宅基地

文章浏览阅读1.8k次。今天闲来无事看了下python基础知识,当学到数据类型转换的int()方法时候。发现了这么一个有意思的事情,算是IDE或是解释器的一个小BUG。(具体原因暂不明,留待以后查找问题)先讲下环境操作系统: windows10python版本:3.6.5IDE环境: pycharm edu 2018.1 x64解释器: CPython然后 int()方法的作用函数说明int(x..._"请问下面代码存在什么问题? >>> age = 18 >>> message = \"祝杜小帅\" + age +"

python cmap_Python cmap包_程序模块 - PyPI - Python中文网-程序员宅基地

文章浏览阅读1.8k次。cmapy在python中使用matplotlib colormaps和opencv。matplotlib提供了很多nice colormaps。cmapy将这些颜色映射公开为颜色列表,这些颜色列表可与opencv一起用于为图像着色或用于python中的其他绘图任务。Original imageviridis请参阅此all colormaps example中截至matplotlib 2.2.3的..._python cmap

mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项-程序员宅基地

文章浏览阅读783次。在MySQL中,触发器可以在你执行INSERT、UPDATE或DELETE的时候,执行一些特定的操作。在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作。通过触发器,你可以实现一些业务逻辑或一些数据限制,在简化应用程序逻辑,优化系统性能时非常有用。但在使用MySQL触发器也有一些注意事项,否则会导致触发器不能工作或不按指定的方式工作。1. MySQL触发器注意事项MySQL触发器使..._加触发器会引发什么问题

kthreadd和init进程的启动(二)_init second_stage-程序员宅基地

文章浏览阅读436次。注:此文章主要基于展锐Android R代码加上学习总结自IngresGe大佬的分析文章目录一、kthreadd二、init三、Init 进程入口3.1 ueventd_main3.2 FirstStageMain3.3 SetupSelinux3.4 SecondStageMaininit.rc文件解析一、kthreadd/bsp/kernel/kernel4.14/kernel/kthread.cint kthreadd(void *unused){ struct task_struct *_init second_stage

TCP Flags标志位介绍-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏41次。传输控制协议(Transmission Control Protocol,TCP)是一种传输层协议。TCP使数据包从源到目的地的传输更加顺畅。它是一种面向连接的端到端协议。每个数据包由TCP包裹在一个报头中,该报头由10个强制字段共20个字节和一个0到40 字节的可选数据字段组成。如下图所示:来自于https://www.geeksforgeeks.org 1.源端口号(Source Port):16bits,该字段标识发送方应用程序的端口号。 2.目..._tcp flags

Java面试题:什么是JDBC以及如何在Java中使用它进行数据库操作?-程序员宅基地

文章浏览阅读149次。JDBC(Java Database Connectivity,Java数据库连接)是Java语言连接数据库的一种规范,它为Java应用程序提供了连接各种关系数据库的统一接口。通过JDBC,Java应用程序可以访问任何提供了JDBC驱动的数据库。注意:从JDBC 4.0开始,不再需要显式加载驱动,因为驱动会在运行时自动加载。但是,如果你正在使用旧版本的JDBC或者出于某种原因需要显式加载驱动,那么仍然可以使用上述方法。通常,你可以使用try-with-resources语句来自动管理这些资源的关闭。

随便推点

论文阅读笔记《Meta-learning for semi-supervised few-shot classification》_self-supervised continuous meta-learning for few-s-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏15次。核心思想  本文提出一种基于半监督训练的小样本分类算法。所谓半监督就是在训练集中即包括带有标签的图片,也包含不带有标签的图片,作者认为人类在学习物品分类时,也会观察到许多非目标类别的物体,这种学习方式更加接近实际使用需求,并且可以提高算法的泛化能力。本文以原型网络(Prototypical Network)作为baseline,在此基础上提出了三种改进型,以满足无监督训练的需要。与原型网络(Prototypical Network)相似,训练集也划分为支持集与查询集,不同的是在支持集中还包含有不带有标签的_self-supervised continuous meta-learning for few-shot image classification

【终极方案】解决警告信息cudart64_100.dll_copy cudart64_100.dll-程序员宅基地

文章浏览阅读69次。【代码】【终极方案】解决警告信息cudart64_100.dll。_copy cudart64_100.dll

第一篇 使用numpy创建数组(一维、多维)_numpy创建一维数组-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏34次。1、numpy创建一维数组[ 1] 通过列表生成数组import numpy as npdata1=[5,7,9,20]#列表类型 list arr1=np.array(data1) #ndarray数组类型 numpy.ndarrayprint(data1)print(type(data1)) #type输出数据类型#print((data1,type(data1)print(arr1)print(type(arr1))结果如下:我们可以发现数据类型已经发生了改变,li_numpy创建一维数组

Python|函数——自定义函数_自定义整数幂运算无参函数python-程序员宅基地

文章浏览阅读1.2k次。本文是笔者学习李立宗老师的Python课程后整理的学习笔记,希望能帮助到有需要的同学,侵删。_自定义整数幂运算无参函数python

c/c++的字符和字符串输入输出_c++输出字符串-程序员宅基地

文章浏览阅读1.3k次,点赞10次,收藏14次。c/c++的字符和字符串输入输出._c++输出字符串

ajax net::err_connection_refused,错误选项net :: ERR_CONNECTION_REFUSED-程序员宅基地

文章浏览阅读2.6k次。我正在开发一个使用jQuery(前端)和Python(后端)的Web应用程序。同时使PUT请求,以更新数据库中的细节,这是我在控制台得到的错误:错误选项net :: ERR_CONNECTION_REFUSEDOPTIONS “REST API URL” 网:: ERR_CONNECTION_REFUSED我jQuery代码是:$.ajax({type: "PUT",url: "REST API ..._jquery 请求报net::err_connection_refused

推荐文章

热门文章

相关标签