设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
点P(x1,y1) 与圆(x-a)²+(y-b)²=r²的位置关系:
(1)当(x1-a)²+(y1-b)²>r²时,则点P在圆外。
(2)当(x1-a)²+(y1-b)²=r²时,则点P在圆上。
(3)当(x1-a)²+(y1-b)²<r²时,则点P在圆内。
#include <iostream>
#include <cmath>
using namespace std;
//点类
class Point{
public:
//设置x坐标
void setX(int x){
m_X = x;
}
//获取x坐标
int getX(){
return m_X;
}
//设置y坐标
void setY(int y){
m_Y = y;
}
//获取y坐标
int getY(){
return m_Y;
}
private:
int m_X;
int m_Y;
};
//圆类
class Circle{
public:
//设置半径
void setR(int r){
m_R = r;
}
//获取半径
int getR(){
return m_R;
}
//设置圆心
void setCenter(Point p){
m_Center = p;
}
//获取圆心
Point getCenter(){
return m_Center;
}
//利用成员函数判断点和圆的关系
void isInCircleByClass(Point & p){
//获取圆心和点的距离的平方
int distance = pow((m_Center.getX() - p.getX()),2) + pow((m_Center.getY() - p.getY()),2);
int rDistance = pow(m_R,2);
//判断关系
if (rDistance == distance){
cout << "成员函数:点在圆上" << endl;
}else if (rDistance > distance){
cout << "成员函数:点在圆内" << endl;
}else{
cout << "成员函数:点在圆外" << endl;
}
}
private:
int m_R; //半径
Point m_Center; //圆心
};
//利用全局函数 判断点和圆的关系
void isInCircle( Circle & c, Point &p){
//获取圆心和点的距离的平方
int distance = pow((c.getCenter().getX() - p.getX()),2) + pow((c.getCenter().getY() - p.getY()),2);
int rDistance = pow(c.getR(),2);
//判断关系
if (rDistance == distance){
cout << "全局函数:点在圆上" << endl;
}else if (rDistance > distance){
cout << "全局函数:点在圆内" << endl;
}else{
cout << "全局函数:点在圆外" << endl;
}
}
int main(){
//创建圆
Circle c1;
Point center;
center.setX(10);
center.setY(0);
c1.setCenter(center);
c1.setR(10);
//创建点
Point p1;
p1.setX(10);
p1.setY(11);
//利用全局判断点和圆的关系
isInCircle(c1, p1);
//利用成员函数判断点和圆的关系
c1.isInCircleByClass(p1);
return 0;
}