您的位置:首页 > 编程语言 > C语言/C++

C++判断两圆关系(用Circle和Point类)

2019-04-22 19:14 183 查看

C++判断两圆关系(用Circle和Point类)

构造函数不是Circle(int cx, int cy, int r)而是Circle(Point pc,float r)时

#include<iostream>
#include<cmath>
using namespace std;
const double PI=3.14;
class Point{
public:
Point(int x=0,int y=0);
Point(Point &p);
~Point();
friend class Circle;
private:
int x,y;
};
Point::Point(int x0,int y0):x(x0),y(y0){
cout<<"point构造函数"<<endl;
}
Point::Point(Point &p):x(p.x),y(p.y){
cout<<"point复制构造函数"<<endl;
}
Point::~Point(){}
class Circle{
public:
Circle(Point p,float r=0);
Circle(Circle &c);
~Circle();
int getX(){
return pc.x;
}
int getY(){
return pc.y;
}
void showCount();
double getArea();
friend void judge(Circle cb,Circle ce);
private:
Point pc;
float r;
static int count;
};
Circle::Circle(Point p,float r):pc(p),r(r){count++;}
double Circle::getArea() {
return PI*r*r;
}
Circle::Circle(Circle &c):pc(c.pc),r(c.r){
count++;
cout<<"circle复制构造函数"<<endl;
}
Circle::~Circle(){

}
void Circle::showCount() {
cout<<count<<endl;
}
int Circle::count =0;
void judge(Circle cb,Circle ce){
double dis=sqrt((ce.getX()-cb.getX())*(ce.getX()-cb.getX())+(ce.getY()-cb.getY())*(ce.getY()-cb.getY()));
float t;
if(cb.r>ce.r){
t=cb.r;
cb.r=ce.r;
ce.r=t;
}
if(dis>cb.r+ce.r){
cout<<"相离"<<endl;
}else if(dis<ce.r-cb.r){
cout<<"包含"<<endl;
}else if(dis==ce.r+cb.r){
cout<<dis<<endl<<"外切"<<endl;
}else if(dis==ce.r-cb.r){
cout<<"内切"<<endl;
}else{
cout<<"相交"<<endl;
}
}
int main(){
int xa,ya,xb,yb;
float ra,rb;
cout<<"输入第一个圆:坐标x,y和半径r"<<endl;
cin>>xa>>ya>>ra;
Point pb(xa,ya);
Circle c1(pb,ra);
cout<<"输入第二个圆:坐标x,y和半径r"<<endl;
cin>>xb>>yb>>rb;
Point pe(xb,yb);
Circle c2(pe,rb);
cout<<"圆C1面积为:"<<c1.getArea()<<endl;
cout<<"圆C2面积为:"<<c2.getArea()<<endl;
cout<<"两圆关系为:"<<endl;
judge(c1,c2);
cout<<endl;
c2.showCount() ;

return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: