阅读背景:

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

来源:互联网 

问题及代码:

/*
* 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应该大于c1
	Point 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;
}
/*
* Copyright (c) 2014, 烟台大学计算机学院
* A



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: