c++定義圓類、點類,通過求兩點距離判斷兩圓的位置關係

 

//以下是三個頭文件

//AdvCircle.h

#pragma once

 

class AdvCircle
{
public:
    void setCircle(int _r, int _x0, int _y0);
    
    int getX1();
    int getY1();
    int getR1();


private:
    int r;
    int x0;
    int y0;
};

 

//DisPoint.h

#pragma once
#include "MyPoint.h"
#include "AdvCircle.h"

class DisPoint//定義一個距離類,通過提供兩點座標來進行兩點之間距離的計算
{
public:
    double CalculateDis(MyPoint & myp01, MyPoint & myp02);
    int CalculateL(AdvCircle &mp01, AdvCircle &mp02);
};

//MyPoint.h

#pragma once

#include"AdvCircle.h"

class MyPoint
{
public:
    void setPoint(AdvCircle &cir);
    int getX1();
    int getY1();

private:
    int x1;
    int y1;
};

 

 

下面是我的cpp文件

1.//AdvCircle.cpp

#include <iostream>
using namespace std;

#include "AdvCircle.h"


void AdvCircle::setCircle(int _r, int _x0, int _y0)
{
    r = _r; x0 = _x0; y0 = _y0;
}
int AdvCircle::getX1()
{
    return x0;
}
int AdvCircle::getY1()
{
    return y0;
}
int AdvCircle::getR1()
{
    return r;
}


2.//MyPoint.cpp

 

//在頭文件中可以進行前置聲明,但在cpp文件中不可以使用前置聲明
             //如果需要使用前置的聲明,必須將函數寫在前面

#include "MyPoint.h"
#include "AdvCircle.h"

    void MyPoint::setPoint(AdvCircle &cir)
    {
        x1 = cir.getX1();
        y1 = cir.getY1();
    }
    int MyPoint::getX1()
    {
        return x1;
    }
    int MyPoint::getY1()
    {
        return y1;
    }

 

3.//DisPoint.cpp

#include "MyPoint.h"
#include "DisPoint.h"
#include "AdvCircle.h"
#include <math.h>

 

double DisPoint::CalculateDis(MyPoint & myp01, MyPoint & myp02)
{

    double dis = sqrt((myp01.getX1() - myp02.getX1())*(myp01.getX1() - myp02.getX1()) + (myp01.getY1() - myp02.getY1())*(myp01.getY1() - myp02.getY1()));
    return dis;

}
int DisPoint::CalculateL(AdvCircle &mp01, AdvCircle &mp02)
{
    
    int lenth = mp01.getR1() + mp02.getR1();
    return lenth;

}
 

4.//main()

#include <iostream>
#include "MyPoint.h"
#include "AdvCircle.h"
#include "DisPoint.h"
using namespace std;

 


int main()
{
    AdvCircle c1,c2;
    int r1, x1, y1;
    int r2, x2, y2;

    cout << "請輸入第一個圓的半徑、x1和y1 " << endl;
    cin >> r1 >> x1 >> y1;
    c1.setCircle(r1, x1, y1);

    cout << "請輸入第二個圓的半徑、x2和y2 " << endl;
    cin >> r2 >> x2 >> y2;
    c2.setCircle(r2, x2, y2);

    MyPoint p1, p2;
    DisPoint p;//這個值無論是什麼值其都可以,因爲必須要聲明,而其中p就是一個對象,其叫什麼無所謂
    p1.setPoint(c1);
    p2.setPoint(c2);


    double tag = p.CalculateDis(p1, p2);
    int l = p.CalculateL(c1, c2);


    if (tag > l)
    {
        cout << "相離" << endl;
    }
    else if (tag = l)
    {
        cout << "相切" << endl;
    }
    else
    {
        cout << "相交" << endl;
    }


    cout << " 兩圓心距離爲 " << tag << endl;
    system("pause");


}
 

 

注:第一此寫博客,如有錯誤和建議,歡迎糾正

最近在學c++,多交流,共同進步

 

 

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