C++判断一个点和一个圆的关系(点在圆内、点在圆上、点在圆外)

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_72714790/article/details/126716013