對於兩圓的位置一般有五種關系:
(1) 外離:兩圓的半徑之和小於兩圓圓心距離
(2) 外切:兩圓的半徑之和等於兩圓圓心距離
(3) 相交:兩圓的半徑之和大於兩圓圓心距離,兩圓圓心距離大於兩圓半徑之差
(4) 內切:兩圓的半徑之差等於兩圓圓心距離
(5) 內含:兩圓的半徑之差小於兩圓圓心距離
具體實現C++代碼如下:
#include<iostream>
#include<cmath>
using namespace std;
class Point {
private:
double m_x,m_y;
public:
void set(double x, double y) {
m_x = x; m_y = y;
}
double dispoint(Point& another) {
return hypot(m_x - another.m_x, m_y - another.m_y);
}
};
class Circle {
private:
double m_r;
Point p;
public:
void set(double x, double y) {
p.set(x, y);
}
void setr(double r) {
m_r = r;
}
int judge(Circle &another) {
double rr = m_r + another.m_r;
double rs = fabs(m_r - another.m_r);
double dis = p.dispoint(another.p);
if (rr == dis) return 1; //外切
else if (rr < dis) return 2; //外離
else if (dis<rr && dis>rs) return 3;//相交
else if (rs == dis) return 4;//內切
else if (rs > dis) return 5;//內含
}
};
void main() {
Circle c1, c2;
double x, y,r,jude;
cout << "請輸入圓1x坐標:" << endl;
cin >> x;
cout << "請輸入圓1y坐標:" << endl;
cin >> y;
c1.set(x, y);
cout << "請輸入圓1半徑:" << endl;
cin >> r;
c1.setr(r);
cout << "請輸入圓2x坐標:" << endl;
cin >> x;
cout << "請輸入圓2y坐標:" << endl;
cin >> y;
c2.set(x, y);
cout << "請輸入圓2半徑:" << endl;
cin >> r;
c2.setr(r);
jude = c1.judge(c2);
if (jude == 1) {
cout << "兩圓相外切" << endl;
}
else if (jude == 3) {
cout << "兩圓相交" << endl;
}
else if(jude == 2) {
cout << "兩圓相外離" << endl;
}
else if (jude == 4) {
cout << "兩圓相內切" << endl;
}
else if (jude == 5) {
cout << "兩圓相內含" << endl;
}
system("pause");
}