ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-11-11 22:03:16  阅读:167  来源: 互联网

标签:center Point int 核心 void 编程 C++ getX Circle


设计一个圆形类(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、只需留下函数的实现即可,注意在函数前需加该函数的作用域。

标签:center,Point,int,核心,void,编程,C++,getX,Circle
来源: https://www.cnblogs.com/keepma/p/15542104.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有