#include <iostream>
using namespace std;
class Circle;
class Point
{
protected:
double x,y;
public:
Point(int xx=0,int yy=0):x(xx),y(yy) {}
friend ostream& operator<<(ostream&output,const Point &c);
friend double locate(Point &p,Circle &c); //点与圆的位置关系
};
ostream& operator<<(ostream&output,const Point &c)
{
output<<"("<<c.x<<","<<c.y<<")"<<endl;
return output;
}
class Circle:public Point
{
protected:
double r;
public:
Circle(int xx=0,int yy=0,double rr=0):Point(xx,yy),r(rr){};
friend ostream& operator<<(ostream&output,const Circle &c);
friend double locate(Point &p,Circle &c); //点与圆的位置关系
};
ostream& operator<<(ostream&output,const Circle &c)
{
output<<"("<<c.x<<","<<c.y<<","<<c.r<<")"<<endl;
return output;
}
double locate(Point &p,Circle &c)
{
if(((p.x-c.x)*(p.x-c.x)+(p.y-c.y)*(p.y-c.y))<(c.r*c.r))
return -1;
else if(((p.x-c.x)*(p.x-c.x)+(p.y-c.y)*(p.y-c.y))>(c.r*c.r))
return 1;
else
return 0;
}
int main( )
{
Circle c1(3,2,4),c2(4,5,5); //c2应该大于c1
Point p1(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;
return 0;
}