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++,多交流,共同进步

 

 


版权声明:本文为weixin_42208807原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。