点和圆的关系
设计一个圆类和一个点类,判断点和圆的关系。
1.首先,圆类我们要设置它的圆心和半径。
2.点要写出它的x坐标和y坐标。
3.判断点和圆的关系就是计算点到圆心的距离,然后用这个距离和半径比较。
4.那么如果这个距离比半径大,就是在圆外,反之就是圆内,如果相等,就在圆上
用代码来解释就是
void panduan(Circle &c,Point &p)//这里传入圆心,和点的坐标 {int juli=(c.getcenter().getX() - p.getX())* (c.getcenter().getX() - (p.getX()) +( c.getcenter().getY() - p.getY())* (p.getX()) + c.getcenter().getY() - p.getY());//这里是(x1-x2)^2+(y1-y2)^2,也就是点到圆心距离的平方 int L = c.getR() * c.getR();//L是半径的平方
if (juli == L)//我们拿点到距离的平方和半径的平方作比较,就不用开根号了,这里是距离等于半径 { cout << "点在圆上" << endl; } else if (juli > L)//距离比半径大 { cout << "点在圆外" << endl; } else//距离比半径小 { cout << "点在圆内" << endl; } }
主要的写完了,剩下的就是创建圆类和点类,然后把上面判断的过程加进去就行了
完整代码是
#include<iostream> using namespace std; class Point { private: int m_X;//设置x坐标 int m_Y;//y坐标 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; } }; class Circle { public: void setR(int r) { m_R = r;//圆类的设置半径 } int getR() { return m_R;//获得半径 } void setcenter(Point center)
//这里要给圆设一个圆心 { m_center = center; } Point getcenter() { return m_center;//获得圆心坐标 } private: Point m_center; int m_R; }; void panduan(Circle &c,Point &p) {int juli=(c.getcenter().getX() - p.getX())* (c.getcenter().getX() - (p.getX()) +( c.getcenter().getY() - p.getY())* (p.getX()) + c.getcenter().getY() - p.getY()); int L = c.getR() * c.getR(); if (juli == L) { cout << "点在圆上" << endl; } else if (juli > L) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } } int main() { Circle c;//创建一个叫c的圆 c.setR(10);//圆的半径设置为10 Point center; center.setX(10);//圆的圆心x坐标为10 center.setY(0);//圆心y坐标为0 c.setcenter(center); Point p;//创建一个叫p的点 p.setX(101);//p点x坐标为101 p.setY(101);//y坐标为101 panduan(c, p);//判断点和圆的关系 return 0; }