题目:设计一个圆形类(AdvCircle),和一个点类(Point),计算点和圆的关系。 假如圆心坐标为 x0, y0, 半径为 r,点的坐标为 x1, y1。
计算公式:
点在圆上:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) == rr
点在圆内:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) < rr
点在圆外:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) > r*r
参考代码:
#include <iostream>
using namespace std;
//点类
class Point{
private:
int mx;
int my;
public:
void setX(int x){
mx=x;
}
void setY(int y){
my=y;
}
int getX(){
return mx;
}
int getY(){
return my;
}
};
//圆类
class AdvCircle{
private:
Point mp;//圆心
int mr;//半径
public:
void setP(int x,int y){
mp.setX(x);
mp.setY(y);
}
void setR(int r){
mr=r;
}
int getR(){
return mr;
}
Point& getP(){
return mp;
}
//判断点和圆的关系
void rela(Point& point){
int distance=((point.getX()-mp.getX())*(point.getX()-mp.getX()))+((point.getY()-mp.getY())*(point.getY()-mp.getY()));
int ra=mr*mr;
if(distance==ra)//相等
{
cout<<"Point("<<point.getX()<<","<<point.getY()<<")"<<"在圆上"<<endl;
}
if(distance>ra)//大于半径
{
cout<<"Point("<<point.getX()<<","<<point.getY()<<")"<<"在圆外"<<endl;
}
if(distance<ra)//小于半径
{
cout<<"Point("<<point.getX()<<","<<point.getY()<<")"<<"在圆内"<<endl;
}
}
};
int main()
{
//实例化圆对象
AdvCircle cir;
cir.setP(20,20);
cir.setR(5);
//实例化点对象
Point point;
point.setX(25);
point.setY(20);
cir.rela(point);
return 0;
}