第十二週項目四(1):點、圓的關係

問題及代碼:

/*
*Copyright (c)2015,煙臺大學計算機與控制工程學院
*All rights reserved.
*文件名稱: 點、圓的關係 .cpp
*作    者:白雲飛
*完成日期:2015年5月21日
*版 本 號:v1.0
*
*問題描述:(1)先建立一個Point(點)類,包含數據成員x,y(座標點);
           (2)以Point爲基類,派生出一個Circle(圓)類,增加數據成員(半徑),基類的成員表示圓心;
           (3)編寫上述兩類中的構造、析構函數及必要運算符重載函數(本項目主要是輸入輸出);
           (4)定義友元函數int locate,判斷點p與圓的位置關係(返回值<0圓內,==0圓上,>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&a) const;
    friend ostream & operator<<(ostream &,const Point &);
};
double Point::distance(const Point&a) const
{
    return sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));
}
ostream & operator<<(ostream &output,const Point &p)
{
    output<<"["<<p.x<<","<<p.y<<"]"<<endl;
    return output;
}
class Circle:public  Point
{
protected:
    double radius;
public:
    Circle(double a=0,double b=0,double r=0):Point(a,b),radius(r) {}
    friend ostream &operator<<(ostream &,const Circle &);
    friend int locate(const Point&a,const Circle&b);
};
ostream &operator<<(ostream &output,const Circle &c)
{
    output<<"["<<c.x<<", "<<c.y<<"], r="<<c.radius<<endl;
    return output;
}
int locate(const Point& a,const Circle&b)
{
    const Point z(b.x,b.y);
    double d = z.distance(a);
    if (d ==b.radius)
        return 0;
    else if (d < b.radius)
        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;
}


運行結果:

 

學習心得:

distance的函數作爲Point類的成員函數比較方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章