判断点和圆的关系的方法:比较点到圆心的距离,若距离小于半径就在圆内,若距离等于半径就在圆上,若大于就在圆外。

这里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;
}