1.问题描述
设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
2.逻辑思路
点和圆的关系有三种,圆外、圆上、圆内。
只要比较点到圆心的距离d与圆的半径r大小关系就行,d>r圆外、 d==r 圆上 、d<r圆内。
3.代码思路
3.1创建圆类
圆类的成员为半径和圆心点,点也是一个类(横、纵坐标)。
class Circle
{
public:
void set_R(int r)
{
m_R = r;
}
int get_R()
{
return m_R;
}
void setCenter(Point center)
{
m_Center = center;
}
Point getCenter()
{
return m_Center;
}
private:
int m_R;
Point m_Center;//圆心点类
};
3.2创建点类
class Point
{
public:
void setX(int x)
{
//设置x坐标
m_X = x;
}
int getX()
{
//得到x坐标
return m_X;
}
void setY(int y)
{
//设置y坐标
m_Y = y;
}
int getY()
{
//得到y坐标
return m_Y;
}
private:
int m_X;
int m_Y;
};
3.3判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
//距离的平方
int distance=
(c.getCenter().getX() - p.getX())* (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
//半径的平方
int rDistance = c.get_R() * c.get_R();
if (distance == rDistance)
{
cout << "点在圆上" << endl;
}
else if(distance > rDistance)
{
cout << "点在圆外" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
3.4具体判断
int main()
{
//创建圆
Circle c;
c.set_R(10);//半径
Point center;//创建点——圆心
center.setX(10);//圆心横坐标
center.setY(0);//圆心纵坐标
c.setCenter(center);
//创建点
Point p;
p.setX(10);
p.setY(11);
isInCircle(c, p);
system("pause");
return 0;
}
本次运行设的条件:半径10,圆心(10,0),点(10,11),运行结果如下:
3.5头文件
缺啥补啥,不懂就搜(狗头)
4.封装
上述代码可以在一个文件里就直接写出,实际c++不同模块是要封装进不同文件,这样一个大型的项目才能做成,下面我将会封装一下,可以看看