点和圆的关系 [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;
}



京公网安备 11010502036488号