第十二周实验报告4
2012-05-09 19:55
295 查看
#include<iostream> #include<Cmath> #include<iomanip> usingnamespacestd; classPoint { public: Point(){x=0;y=0;} Point(doublex0,doubley0){x=x0;y=y0;} ~Point(){} doublegetx(){returnx;} doublegety(){returny;} friendostream&operator<<(ostream&,Point&); doublex,y; }; classCircle:publicPoint { public: Circle(){radii=0;} Circle(doublex0,doubley0,doubler); ~Circle(){}; friendintlocate(Pointp1,Circlec1); doubleLength(Pointp1,Pointp2); friendostream&operator<<(ostream&,Circle&); friendbooloperator>(Circle&c1,Circle&c2); friendbooloperator<(Circle&c1,Circle&c2); friendbooloperator>=(Circle&c1,Circle&c2); friendbooloperator<=(Circle&c1,Circle&c2); friendbooloperator==(Circle&c1,Circle&c2); friendbooloperator!=(Circle&c1,Circle&c2); friendvoidcrossover_point1(Point&p1,Circle&c1,Point&p4,Point&p5); protected: doubleradii; }; Circle::Circle(doublex0,doubley0,doubler):Point(x0,y0),radii(r){} voidcrossover_point1(Point&p1,Circle&c1,Point&p4,Point&p5) { doublex0=(c1.x-p1.x)*c1.radii/sqrt((c1.x-p1.x)*(c1.x-p1.x)+(c1.y-p1.y)*(c1.y-p1.y)); doubley0=(c1.y-p1.y)*c1.radii/sqrt((c1.x-p1.x)*(c1.x-p1.x)+(c1.y-p1.y)*(c1.y-p1.y)); p4.x=c1.x+x0; p4.y=c1.y+y0; p5.x=c1.x-x0; p5.y=c1.y-y0; } intlocate(Pointp1,Circlec1) { doublelength=sqrt((p1.x-c1.x)*(p1.x-c1.x)+(p1.y-c1.y)*(p1.y-c1.y)); if(length<c1.radii) { return1; } elseif(length==c1.radii) { return0; } else { return-1; } } ostream&operator<<(ostream&out,Point&p) { out<<"("<<p.x<<","<<p.y<<")"<<endl; returnout; } ostream&operator<<(ostream&out,Circle&c) { out<<"以"<<"("<<c.x<<","<<c.y<<")为圆心,"<<"半径为"<<c.radii<<"的圆"<<endl; returnout; } booloperator>(Circle&c1,Circle&c2) { if(c1.radii>c2.radii) { returntrue; } else { returnfalse; } } booloperator<(Circle&c1,Circle&c2) { if(c1.radii<c2.radii) { returntrue; } else { returnfalse; } } booloperator>=(Circle&c1,Circle&c2) { if(c1.radii>=c2.radii) { returntrue; } else { returnfalse; } } booloperator<=(Circle&c1,Circle&c2) { if(c1.radii<=c2.radii) { returntrue; } else { returnfalse; } } booloperator==(Circle&c1,Circle&c2) { if(c1.radii==c2.radii) { returntrue; } else { returnfalse; } } booloperator!=(Circle&c1,Circle&c2) { if(c1.radii!=c2.radii) { returntrue; } else { returnfalse; } } intmain() { Circlec1(3,2,4),c2(4,5,5);//c2应该大于c1 Pointp1(1,1),p2(3,-2),p3(7,3);//分别位于c1内、上、外 cout<<"圆c1:"<<c1; cout<<"点p1:"<<p1; cout<<"点p1在圆c1之"<<((locate(p1,c1)>0)?"外":((locate(p1,c1)<0)?"内":"上"))<<endl; cout<<"点p2:"<<p2; cout<<"点p2在圆c1之"<<((locate(p2,c1)>0)?"外":((locate(p2,c1)<0)?"内":"上"))<<endl; cout<<"点p3:"<<p3; cout<<"点p3在圆c1之"<<((locate(p3,c1)>0)?"外":((locate(p3,c1)<0)?"内":"上"))<<endl; cout<<endl; cout<<"圆c1:"<<c1; if(c1>c2) { cout<<"大于"<<endl; } if(c1<c2) { cout<<"小于"<<endl; } if(c1>=c2) { cout<<"大于等于"<<endl; } if(c1<=c2) { cout<<"小于等于"<<endl; } if(c1==c2) { cout<<"等于"<<endl; } if(c1!=c2) { cout<<"不等于"<<endl; } cout<<"圆c2:"<<c2; cout<<endl; Pointp4,p5; crossover_point1(p1,c1,p4,p5); cout<<"点p1:"<<p1; cout<<"与圆c1:"<<c1; cout<<"的圆心相连,与圆交于两点,分别是:"<<endl; cout<<"交点:"<<p4; cout<<"交点:"<<p5; cout<<endl; system("pause"); return0; }圆c1:以(3,2)为圆心,半径为4的圆
点p1:(1,1)
点p1在圆c1之外
点p2:(3,-2)
点p2在圆c1之上
点p3:(7,3)
点p3在圆c1之内
圆c1:以(3,2)为圆心,半径为4的圆
小于
小于等于
不等于
圆c2:以(4,5)为圆心,半径为5的圆
点p1:(1,1)
与圆c1:以(3,2)为圆心,半径为4的圆
的圆心相连,与圆交于两点,分别是:
交点:(6.57771,3.78885)
交点:(-0.577709,0.211146)
请按任意键继续...