判断点和圆的关系的方法:比较点到圆心的距离,若距离小于半径就在圆内,若距离等于半径就在圆上,若大于就在圆外。
这里Pointer类里本来是 没有distance函数的! 千万不要直接拿来用哦!我定义它是为了更好确定点到圆心的距离(圆心也是点嘛),这里定义实现分离比较好看,但是它题目模板里都是放在类里的。。。
#include <cmath> #include <iostream> using namespace std; // 点类 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; } double distance(Pointer p) { return sqrt((this->x - p.x) * (this->x - p.x) + (this->y - p.y) * (this->y - p.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 p); }; void Circle::isPointerInCircle(Pointer p) { if (center.distance(p) < radius) { cout << "in" << endl; } if (center.distance(p) == radius) { cout << "on" << endl; } if (center.distance(p) > radius) { 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; }