您的位置:首页 > 其它

第十二周实验报告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)
请按任意键继续...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c system class