通过两个类判断点和圆之间位置关系
#include<iostream>
//求点和圆之间的位置关系
//设计点类
class Point {
//属性
private:
int m_X;
int m_Y;
public:
//行为
//设置点的x坐标
void setm_X(int x) {
m_X = x;
}
//获取点的x坐标
int getm_X() {
return m_X;
}
//设置点的y坐标
void setm_Y(int y) {
m_Y = y;
}
//获取点的y坐标
int getm_Y() {
return m_Y;
}
};
//设计圆类
class Circle {
//属性
private:
int m_R; //圆的半径
Point m_Center; //圆心坐标
//行为
public:
//设置圆的半径
void setm_R(int r) {
m_R = r;
}
//获取圆的半径
int getm_R() {
return m_R;
}
//设置圆的圆心
void setm_Center(Point center) {
m_Center = center;
}
//获取圆心坐标
Point getm_Center() {
return m_Center;
}
};
//通过全局函数判断点和圆的位置关系
void IsInCircle(Point &p, Circle &c) {
double r2, distance2;
r2 = c.getm_R() * c.getm_R();
distance2 = (c.getm_Center().getm_X() - p.getm_X()) * (c.getm_Center().getm_X() - p.getm_X()) +
(c.getm_Center().getm_Y() - p.getm_Y()) * (c.getm_Center().getm_X());
if (r2 == distance2) {
std::cout << "点在圆上。" << std::endl;
}
else if (r2 < distance2) {
std::cout << "点在圆外。" << std::endl;
}
else {
std::cout << "点在圆内。" << std::endl;
}
}
int main() {
//实例化点对象
Point p;
//输入点的xy坐标
int px, py;
std::cout << "输入点的xy坐标:" << std::endl;
std::cin >> px >> py;
//设置点的xy坐标
p.setm_X(px);
p.setm_Y(py);
//实例化圆对象
Circle c;
//输入圆心坐标与原的半径
int cx, cy;
std::cout << "输入圆心坐标:" << std::endl;
std::cin >> cx >> cy;
int r;
std::cout << "输入圆的半径:" << std::endl;
std::cin >> r;
Point center;
center.setm_X(cx);
center.setm_Y(cy);
c.setm_R(r);//设置圆的半径
c.setm_Center(center);//将center设置为圆心
IsInCircle(p, c);
system("pause");
return 0;
}