第十二周 课后实践:项目四——点,圆的关系

来源:互联网 发布:抱抱软件怎么样 编辑:程序博客网 时间:2024/05/16 07:53

问题及代码:

/** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:Project4.cpp* 作    者:陈旭* 完成日期:2015年6月 4日* 版 本 号:v1.0** 问题描述:点,圆关系* 输入描述:略* 程序输出:略*/#include <iostream>#include <cmath>using namespace std;class Point{protected:    double x;    double y;public:    Point(double a=0,double b=0)    {        x=a;        y=b;    };    double distance(const Point &p) const;    friend ostream & operator<<(ostream &,const Point &);};double Point::distance(const Point &p) const{    double px=x-p.x;    double py=y-p.y;    return sqrt(px*px+py*py);}ostream &operator<<(ostream &output,const Point &p){    output<<"["<<p.x<<","<<p.y<<"]"<<endl;    return output;}class Circle:public Point{private:    double r;public:    Circle(double a=0,double b=0,double c=0):Point(a,b),r(c) {};    friend ostream & operator<<(ostream &,const Circle &);    friend int locate(const Point &p,const Circle &c);};ostream &operator<<(ostream &output,const Circle &c){    output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.r<<endl;    return output;}int locate(const Point &p,const Circle &c){    const Point cp(c.x,c.y);    double d=cp.distance(p);    if(abs(d - c.r) < 1e-7)        return 0;  //相等    else if (d < c.r)        return -1;  //圆内    else        return 1;  //圆外}int main( ){Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外cout<<"圆c1: "<<c1;cout<<"点p1: "<<p1;cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;cout<<"点p2: "<<p2;cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;cout<<"点p3: "<<p3;cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;return 0;}


 

运行结果:

 

0 0
原创粉丝点击