代码:
#include<iostream>
#include<math.h>
using namespace std;
//定义一个顶点结构体
struct Point{
double x;
double y;
};
//定义判断是否相交的函数
bool isIntersect(Point q1,Point q2,Point q3,Point q4,double r){
for(int i=0;i<1;i++){
//判断矩形是否有一顶点在圆内 ,有则相交
double minx=min(fabs(q1.x-q3.x),fabs(q1.x-q4.x));
double miny=min(fabs(q1.y-q3.y),fabs(q1.y-q4.y));
if(minx*minx+miny*miny<r*r)
return true;
//判断圆是否与矩形左右两条边相交
if((fabs(q1.x-q2.x)<(fabs(q3.x-q4.x)/2+r))&&(fabs(q1.y-q2.y)<fabs(q3.y-q4.y)/2))
return true;
//判断圆是否与矩形上下两条边相交
if((fabs(q1.y-q2.y)<(fabs(q3.y-q4.y)/2+r))&&(fabs(q1.x-q2.x)<fabs(q3.x-q4.x)/2))
return true;
}
return false;
}
int main(){
//分别定义圆和矩形的中心点以及矩形左下右上两个点
Point p1,p2,p3,p4;
double r,a,b;
//输入圆
cout<<"请输入圆心坐标和半径:"<<endl;
cin>>p1.x>>p1.y>>r;
//输入矩形
cout<<"请输入矩形中心坐标和长宽:"<<endl;
cin>>p2.x>>p2.y>>a>>b;
p3.x=p2.x-a/2;
p3.y=p2.y-b/2;
p4.x=p2.x+a/2;
p4.y=p2.y+b/2;
//判断是否相交
if(isIntersect(p1,p2,p3,p4,r)==true)
cout<<"圆与矩形相交"<<endl;
else
cout<<"圆与矩形不相交"<<endl;
return 0;
}
输入输出:
参考文献:
https://www.cnblogs.com/llkey/p/3707351.html