HM105 点与圆
HM105 点与圆
来源: 第 105 集 类和对象-封装-设计案例2-点和圆关系
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
点和圆只有三种关系:点在圆内、点在圆上、点在圆外。判断方法是比较**点到圆心的距离**和**半径**:
- 距离 \(<\) 半径:点在圆内
- 距离 \(=\) 半径:点在圆上
- 距离 \(>\) 半径:点在圆外
两点 \((x_1,y_1)\)、\((x_2,y_2)\) 的距离是 \(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\)。为了避开开方,左右同时平方,改为比较**距离的平方**和**半径的平方**,三种关系仍然成立。
必须设计两个类:
- 点类
Point:私有成员mX、mY,公共接口setX/getX/setY/getY。 - 圆类
Circle:私有成员半径mRadius,以及圆心mCenter。圆心必须是Point类型——**另一个类可以作为本类的成员**,不要把圆心拆成圆上的两个整数。再提供setRadius/getRadius/setCenter/getCenter。
用全局函数判断关系,圆和点都用引用传递。先算距离平方,再算半径平方,最后输出:
点在圆内点在圆上点在圆外
大型项目会把类拆成头文件声明和源文件实现(头文件留成员声明,源文件用 类名:: 写成员函数;圆要用到点就包含点的头文件)。本题评测是单文件,不必拆文件,但圆心仍必须是 Point 成员。
输入格式
第一行三个整数 \(c_x, c_y, r\),表示圆心坐标和半径。
第二行一个整数 \(n\)(\(1 \le n \le 1000\))。
接下来 \(n\) 行,每行两个整数 \(x,y\),表示一个点。
坐标与半径的绝对值均不超过 \(10^4\),保证 \(r \ge 0\)。
输出格式
共 \(n\) 行,每行一种关系,行末换行。
样例
输入 #1
10 0 10
3
10 10
10 11
10 9
输出 #1
点在圆上
点在圆外
点在圆内
输入 #2
0 0 5
2
3 4
0 0
输出 #2
点在圆上
点在圆内
说明
- 圆心 \((10,0)\)、半径 \(10\) 时:点 \((10,10)\) 在圆上,\((10,11)\) 在圆外,\((10,9)\) 在圆内。
- 用平方比较,不要开方。
- 圆的圆心必须是
Point对象,不能只在圆类里散落两个坐标变量。
信息
- ID
- 1104
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者