点和圆的关系 [2190767]
预备知识
- 两个坐标点 p1(x1,y1)、p2(x2,y2) 直接的距离为:
- 判断点和圆的关系,只需要计算该点和圆心的距离 d,和圆的半径 r 进行比较:
- 如果 d = r,则点在圆上
- 如果 d < r,则点在圆内
- 如果 d > r,则点在圆外
思路、步骤
- 设计点类(Pointer)
- 成员变量:x轴坐标(int x),y轴坐标(int y)
- 成员方法:公共的访问方法 void setX(int x)、int getX()、void setY(int y)、int getY()
- 设计圆类(Circle)
- 成员变量:圆心(Pointer center)、半径(int radius)
- 成员方法:公共的访问方法 void setCenter(int x, int y)、void setRadius(int radius)、判断点和圆关系 void isPointerInCircle(Pointer& point)
- void isPointerInCircle(Pointer& point) 实现思路
- 如果 d的平方 = r的平方,则点在圆上
- 如果 d的平方 < r的平方,则点在圆内
- 如果 d的平方 > r的平方,则点在圆外
代码实现
#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; } }; // 圆类 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& point) { // 计算点和圆心的距离 int distance = (point.getX() - center.getX()) * (point.getX() - center.getX()) + (point.getY() - center.getY()) * (point.getY() - center.getY()); int r = radius * radius; if (distance < r) { cout << "in" << endl; } else if (distance == r) { cout << "on" << 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; }