题意整理。
- 给定一个圆类和一个点类。
- 设计一个方法,判断点与圆的关系(圆内、圆上、圆外)。
方法一(模拟)
1.解题思路
- 首先定义属性x1、y1用来记录p点的坐标,定义x2、y2用来记录圆心的坐标。通过坐标计算圆心到p点的距离的平方,记为dist。
- 然后比较dist与半径平方的大小。如果距离dist小于半径平方,则在圆内;如果距离dist等于半径平方,则在圆上;如果距离dist大于半径平方,则在圆外。
图解展示:
2.代码实现
#include <iostream>
#include <math.h>
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;
}
// write your code here......
void isPointerInCircle(Pointer p){
int x1=p.getX();
int y1=p.getY();
int x2=center.getX();
int y2=center.getY();
int dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
if(dist<radius*radius){
cout<<"in"<<endl;
}
else if(dist==radius*radius){
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;
}
3.复杂度分析
- 时间复杂度:需要进行常数次操作,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。