#include <iostream>
using namespace std;
#define IN_Circle 1
#define ON_Circle 2
#define OUT_Circle 3
class Point
{
public:
void SetX(float x)
{
p_x = x;
}
void SetY(float y)
{
p_y = y;
}
float GetX()
{
return p_x;
}
float GetY()
{
return p_y;
}
private:
float p_x;
float p_y;
};
class Circle
{
public:
void SetC_R(float r)
{
//判断圆的半径是否大于0
if(r < 0.0f)
{
cout << "srt r failed:(r > 0.0f)" << endl;
c_r = 0.0f;
}
else
{
c_r = r;
}
}
float GetC_R()
{
return c_r;
}
//判断点和圆的关系
int Point_Circle(Point p)
{
float distance = (c_x - p.GetX())*(c_x - p.GetX()) + (c_y - p.GetY())*(c_y - p.GetY());//求点到圆心的距离的平方
float res = distance - c_r*c_r;//判断距离的平方与圆的半径的平方的大小
if(res > 0)
{
return OUT_Circle;
}
else if(res < 0)
{
return IN_Circle;
}
else
{
return ON_Circle;
}
}
void SetC_X(float x)
{
c_x = x;
}
void SetC_Y(float y)
{
c_y = y;
}
float GetC_X()
{
return c_x;
}
float GetC_Y()
{
return c_y;
}
private:
float c_r;
float c_x;
float c_y;
//Point center;
};
int main(int argc, char *argv[])
{
Circle c;
float c_x,c_y,c_r;
cout << "请设置圆的横坐标:";
cin >> c_x;
cout << "请设置圆的纵坐标:";
cin >> c_y;
cout << "请设置圆的半径:";
cin >> c_r;
c.SetC_X(c_x);//设置圆的横坐标
c.SetC_Y(c_y);//设置圆的纵坐标
c.SetC_R(c_r);//设置圆的半径
Point p;
float p_x,p_y;
cout << "请设置点的横坐标:";
cin >> p_x;
cout << "请设置点的纵坐标:";
cin >> p_y;
p.SetX(p_x);//设置点的横坐标
p.SetY(p_y);//设置点的纵坐标
if(c.Point_Circle(p) == IN_Circle)
{
cout << "点在圆内!" << endl;
}
else if(c.Point_Circle(p) == ON_Circle)
{
cout << "点在圆上!" << endl;
}
else if(c.Point_Circle(p) == OUT_Circle)
{
cout << "点在圆外!" << endl;
}
return 0;
}
C++判断一个点和一个圆的关系(点在圆内、点在圆上、点在圆外)
最新推荐文章于 2023-10-30 23:20:57 发布