定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;
定义一个圆Circle类,其属性包括圆心和半径;
创建两个圆形对象,提示用户输入,判断两圆是否相交。
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
Point();
~Point();
void setPoint(double x, double y) {
px = x;
py = y;
}
double getDist(const Point& p2);
private:
double px;
double py;
};
class Circle
{
double cx;
double cy;
double cr;
public:
Circle()
{
cx = cy = cr = 0;
}
~Circle() {
}
void setCircle(double x, double y, double r);
double getCx() { return cx; }
double getCy() { return cy; }
double getCr() { return cr; }
void judgeXJ(const Circle& c2);
};
Point::Point()
{
px = py = 0;
}
Point::~Point()
{
}
double Point::getDist(const Point& p2)
{
return sqrt((px - p2.px) * (px - p2.px) + (py - py) * (py - p2.py));
}
void Circle::setCircle(const double x, const double y, const double r)
{
if (r <= 0)
{
cout << "非法输入" << endl;
exit(0);
}
cx = x;
cy = y;
cr = r;
}
void Circle::judgeXJ(const Circle& c2)
{
double dist, dist2;
Point p1, p2;
p1.setPoint(cx, cy);
p2.setPoint(c2.cx, c2.cy);
dist = p1.getDist(p2);
dist2 = sqrt((cr + c2.cr) * (cr + c2.cr));
if (dist < dist2)cout << "相交" << endl;
else if (dist > dist2)cout << "不相交" << endl;
else cout << "相切" << endl;
}
int main()
{
Circle c1, c2;
double x1, y1, r1, x2, y2, r2;
cout << "请输入圆1的坐标和半径double:(x,y,r):";
cin >> x1 >> y1 >> r1;
c1.setCircle(x1, y1, r1);
cout << "请输入圆2的坐标和半径double:(x,y,r):";
cin >> x2 >> y2 >> r2;
c2.setCircle(x2, y2, r2);
c1.judgeXJ(c2);
return 0;
}