(C++核心编程 )点和圆的关系

设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。

未分文件书写版:

#include <iostream>
using namespace std;
#include <string>

//点类
class Point
{
public:
    //设置X坐标
    void setX(int x)
    {
        m_x = x;
    }
    //获取X坐标
    int getX()
    {
        return m_x;
    }
    //设置Y坐标
    void setY(int y)
    {
        m_y = y;
    }
    //获取Y坐标
    int getY()
    {
        return m_y;
    }


private:
    int m_x;
    int m_y;
};


//设置一个圆类Circle
class Circle
{
public:
    //设置半径
    void setR(int r)
    {
        m_R = r;
    }
    //获取半径
    int getR()
    {
        return m_R;
    }
    //设置圆心
    void setCenter(Point center)
    {
        m_center = center;
    }
    //获取圆心
    Point getCenter()    //m_center是Piont类的数据
    {
        return m_center;
    }


private:
    int m_R;
    //在类中可以让另一个类 作为本类中的成员--与结构体相似
    Point m_center;
};


//判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
    if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
        cout << "点在圆上" << endl;
    else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
        cout << "点在圆外" << endl;
    else
        cout << "点在圆内" << endl;
}

int main()
{
    //创建并设置点P1
    Point P1;
    P1.setX(10);
    P1.setY(9);

    //创建并设置点P2--圆心
    Point P2;
    P2.setX(10);
    P2.setY(0);

    //设置圆C1
    Circle C1;
    C1.setR(10);
    C1.setCenter(P2);

    isInCircle(C1, P1);

    system("pause");
    return 0;

}

分文件版

point.h

#pragma once    //防止头文件重复包含
#include<iostream>
using namespace std;



//点类
class Point
{
public:
        //设置X坐标
        void setX(int x);

        //获取X坐标
        int getX();

        //设置Y坐标
        void setY(int y);

        //获取Y坐标
        int getY();
    


private:
    int m_x;
    int m_y;
};

point.cpp

#include"point.h"


//只需留下函数的实现即可


    //设置X坐标
    void Point::setX(int x)
    {
        m_x = x;
    }
    //获取X坐标
    int  Point::getX()
    {
        return m_x;
    }
    //设置Y坐标
    void  Point::setY(int y)
    {
        m_y = y;
    }
    //获取Y坐标
    int  Point::getY()
    {
        return m_y;
    }

circle.h

#pragma once    //防止头文件重复包含
#include<iostream>
using namespace std;
#include"point.h"



//设置一个圆类Circle
class Circle
{
public:
    //设置半径
    void setR(int r);
    
    //获取半径
    int getR();
    
    //设置圆心
    void setCenter(Point center);
    
    //获取圆心
    Point getCenter();    //m_center是Piont类的数据
    


private:
    int m_R;
    //在类中可以让另一个类 作为本类中的成员--与结构体相似
    Point m_center;
};

circle.cpp

#include"circle.h"



    //设置半径
    void Circle::setR(int r)
    {
        m_R = r;
    }
    //获取半径
    int Circle::getR()
    {
        return m_R;
    }
    //设置圆心
    void Circle::setCenter(Point center)
    {
        m_center = center;
    }
    //获取圆心
    Point Circle::getCenter()    //m_center是Piont类的数据
    {
        return m_center;
    }

test.cpp

#include <iostream>
using namespace std;
#include <string>
#include"point.h"
#include"circle.h"
////点类
//class Point
//{
//public:
//    //设置X坐标
//    void setX(int x)
//    {
//        m_x = x;
//    }
//    //获取X坐标
//    int getX()
//    {
//        return m_x;
//    }
//    //设置Y坐标
//    void setY(int y)
//    {
//        m_y = y;
//    }
//    //获取Y坐标
//    int getY()
//    {
//        return m_y;
//    }
//
//
//private:
//    int m_x;
//    int m_y;
//};


//设置一个圆类Circle
//class Circle
//{
//public:
//    //设置半径
//    void setR(int r)
//    {
//        m_R = r;
//    }
//    //获取半径
//    int getR()
//    {
//        return m_R;
//    }
//    //设置圆心
//    void setCenter(Point center)
//    {
//        m_center = center;
//    }
//    //获取圆心
//    Point getCenter()    //m_center是Piont类的数据
//    {
//        return m_center;
//    }
//
//
//private:
//    int m_R;
//    //在类中可以让另一个类 作为本类中的成员--与结构体相似
//    Point m_center;
//};


//判断点和圆的关系
void isInCircle(Circle& c, Point& p)
{
    if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) == c.getR() * c.getR())
        cout << "点在圆上" << endl;
    else if ((p.getX() - c.getCenter().getX()) * (p.getX() - c.getCenter().getX()) + (p.getY() - c.getCenter().getY()) * (p.getY() - c.getCenter().getY()) > c.getR() * c.getR())
        cout << "点在圆外" << endl;
    else
        cout << "点在圆内" << endl;
}

int main()
{
    //创建并设置点P1
    Point P1;
    P1.setX(10);
    P1.setY(9);

    //创建并设置点P2--圆心
    Point P2;
    P2.setX(10);
    P2.setY(0);

    //设置圆C1
    Circle C1;
    C1.setR(10);
    C1.setCenter(P2);

    isInCircle(C1, P1);

    system("pause");
    return 0;

}

总结:

分文件时编写类的 .h 文件时:

1、加 #pragma once  //防止头文件重复包含。

2、加相关头文件。

3、仅保留类声明,实现方法去掉。

 

编写类的 .cpp文件时:

1、加入对应的头文件。

2、只需留下函数的实现即可,注意在函数前需加该函数的作用域。

上一篇:【图像处理】 Halcon 实现亚像素边缘检测


下一篇:点击事件--水波纹动画