0
点赞
收藏
分享

微信扫一扫

C++ 判断两个圆是否相交

夏天的枫_ 2022-06-01 阅读 70

#include <iostream>
#include <cmath>

using&nbsp;namespace&nbsp;std;

//同类之间无私处。
class&nbsp;Point{
public:
//设置point的两个坐标
void&nbsp;setXY(int&nbsp;x,&nbsp;int&nbsp;y){
m_x&nbsp;=&nbsp;x;
m_y&nbsp;=&nbsp;y;
}

int&nbsp;getX(){
return&nbsp;m_x;
}

//根据另一个点,返回两个点之间的距离
double&nbsp;pointDistance(Point&nbsp;&amp;p){
int&nbsp;d_x&nbsp;=&nbsp;p.m_x&nbsp;-&nbsp;m_x;&nbsp;
int&nbsp;d_y&nbsp;=&nbsp;p.m_y&nbsp;-&nbsp;m_y;

double&nbsp;dis&nbsp;=&nbsp;sqrt(d_x*d_x&nbsp;+&nbsp;d_y*d_y);

return&nbsp;dis;
}

private:
int&nbsp;m_x;
int&nbsp;m_y;
};


class&nbsp;Circle{
public:
//设置圆的半径
void&nbsp;setR(int&nbsp;r){
m_r&nbsp;=&nbsp;r;
}
//设置圆的坐标
void&nbsp;setXY(int&nbsp;x,&nbsp;int&nbsp;&nbsp;y){
p0.setXY(x,&nbsp;y);
}

//判断另一个圆是否跟自己相交
bool&nbsp;isIntersection(Circle&nbsp;&amp;&nbsp;another_c){
int&nbsp;rr&nbsp;=&nbsp;m_r&nbsp;+&nbsp;another_c.m_r;&nbsp;//两个圆的半径之和
double&nbsp;dis&nbsp;=&nbsp;p0.pointDistance(another_c.p0);

if&nbsp;(dis&nbsp;&lt;=&nbsp;rr)&nbsp;{
//相交
return&nbsp;true;
}
else&nbsp;{
//不相交
return&nbsp;false;
}
}
private:
int&nbsp;m_r;&nbsp;//半径
Point&nbsp;p0;// p0 就是圆的圆心点
};

int&nbsp;main(void){
Circle&nbsp;*circle1&nbsp;=&nbsp;new&nbsp;Circle();
Circle&nbsp;*circle2&nbsp;=&nbsp;new&nbsp;Circle();

int&nbsp;x,&nbsp;y,&nbsp;r;

cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第一个圆的半径&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;r;
circle1&nbsp;-&gt;&nbsp;setR(r);
cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第一个圆的x&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;x;
cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第一个圆的y&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;y;
circle1&nbsp;-&gt;&nbsp;setXY(x,&nbsp;y);


cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第2个圆的半径&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;r;
circle2&nbsp;-&gt;&nbsp;setR(r);
cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第2个圆的x&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;x;
cout&nbsp;&lt;&lt;&nbsp;&quot;请输入第2个圆的y&quot;&nbsp;&lt;&lt;&nbsp;endl;
cin&nbsp;&gt;&gt;&nbsp;y;
circle2&nbsp;-&gt;&nbsp;setXY(x,&nbsp;y);


if&nbsp;(circle1&nbsp;-&gt;&nbsp;isIntersection(*circle2)&nbsp;==&nbsp;true)&nbsp;{
cout&nbsp;&lt;&lt;&nbsp;&quot;两个圆相交&quot;&nbsp;&lt;&lt;&nbsp;endl;
}&nbsp;else&nbsp;{
cout&nbsp;&lt;&lt;&nbsp;&quot;两个圆不相交&quot;&nbsp;&lt;&lt;&nbsp;endl;
}

delete&nbsp;circle1;
delete&nbsp;circle2;

}


举报

相关推荐

0 条评论