牛客网基础C++编程-点和圆的位置关系
描述
有圆类(Circle)和点类(Pointer),在圆类中实现一个 isPointerInCircle方法,该方法传入一个点类对象,判断点和圆的关系,并在该方法中输出。
对两个类进行定义:
- 点类(Pointer):
成员变量:x轴坐标(int x) y轴坐标(int y)
成员方法:成员变量的公共访问方法 - 圆类(Circle):
成员变量:圆心(Point center) 半径(int radius)
成员方法:成员变量的公共访问方法 判断点和圆关系的方法(isPointerInCircle)
输入描述:
键盘输入两个整数,分别是点的 x 坐标和 y 坐标(圆的参数已经给定)
输出描述:
圆类中实现 isPointInCircle 方法,在该方法中输出点和圆的关系,
如果点在圆外,则输出“out”;
如果点在圆上,则输出“on”;
如果点在圆内,则输出“in”。
分析:
点和圆的关系有三种,要想判断点和圆的关系,就要判断点到圆心的距离和圆半径radius的关系,用dist来表示点到圆心的距离,为了方便计算,可以直接用法勾股定理算出距离的平方,再和半径的平方进行比较
1.点在圆外:dist^2 > radius^2
2.点在圆上:dist^2 == radius^2
3.点在圆内:dist^2 < radius^2
其中,用到了< cmath >中的pow()函数, pow(base, exp )作用是求base的exp次幂
#include <iostream>
using namespace std;
#include <cmath>
// 点类
class Pointer {
private:
int x; // x 坐标
int y; // y 坐标
public:
void setX(int x) {
this->x = x;
}
int getX() {
return x;
}
void setY(int y) {
this->y = y;
}
int getY() {
return y;
}
};
// 圆类
class Circle {
private:
Pointer center; // 圆心
int radius; // 半径
public:
void setCenter(int x, int y) {//设置圆心
center.setX(x);
center.setY(y);
}
void setRadius(int radius) {//设置半径
this->radius = radius;
}
void isPointerInCircle(Pointer pointer){//判断点和圆的关系
int dist=pow(pointer.getX()-center.getX(),2)+pow(pointer.getY()-center.getY(),2);//点到圆心距离的平方
if(dist==pow(radius,2)){//点在圆上
cout<<"on"<<endl;
}
else if(dist<pow(radius,2)){//点在圆内
cout<<"in"<<endl;
}
else{//点在圆外
cout<<"out"<<endl;
}
}
};
int main() {
// 键盘输入点的坐标
int x, y;
cin >> x;
cin >> y;
// 创建一个点
Pointer p;
p.setX(x);
p.setY(y);
// 创建一个圆
Circle c;
c.setCenter(5, 0);
c.setRadius(5);
// 判断点和圆的关系
c.isPointerInCircle(p);
return 0;