HM105 点与圆

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:私有成员 mXmY,公共接口 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
通过率
?
上传者