【封装案例】点和圆的关系

文章目录


前言

本篇主要是用C++实现一个判断点和圆关系的程序。

思路:已知点和圆心的坐标,通过比较两点间的距离和圆半径的大小,判断两者的关系(圆上,圆内,圆外)。


1、point.h文件

创建一个点类,并做相关声明

cpp 复制代码
#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;
};

2、circle.h文件

创建一个圆类,并做相关声明

cpp 复制代码
#pragma once
#include<iostream>
using namespace std;
#include"point.h"

//圆类
class Circle
{
private:
	//半径
	int m_R;
	//在一个类中,可以让另一个类作为本来类中的成员
	//圆心
	Point m_Center;
public:
	//设置半径
	void setR(int r);
	
	//获取半径
	int getR();
	
	//设置圆心
	void setCenter(Point center);
	
	//获取圆心
	Point getgetCenter();
	
};

3、point.cpp文件

相关函数的实现(设置和获取点的坐标)

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;
}

4、circle.cpp文件

相关函数的实现(设置和获取半径及圆心的坐标)

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::getgetCenter()
{
	return m_Center;
}

5、主函数和全局函数

全局函数主要是判断点和圆的位置关系

cpp 复制代码
#include<iostream>
using namespace std;
#include<string>
#include"Circle.h"
#include"point.h"

//判断点和圆心的关系
void isInCircle(Circle &c,Point &p)
{
	//计算两点之间距离
	int distance = sqrt(pow(c.getgetCenter().getX() - p.getX(), 2) + pow(c.getgetCenter().getY() - p.getY(), 2));
	//判断关系
	if (distance > c.getR())
	{
		cout << "点在圆外" << endl;
	}
	else if (distance < c.getR())
	{
		cout << "点在圆内" << endl;
	}
	else
	{
		cout << "点在圆上" << endl;
	}
}

int main() {
	//创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(10);
	center.setY(0);
	c.setCenter(center);
	//创建点
	Point p;
	p.setX(10);
	p.setY(10);
	//判断关系
	isInCircle(c, p);

	system("pause");
	return 0;
}

6、测试

改变点的坐标或者圆的部分参数,判断两者的关系

1、点在圆上

2、点在圆内

3、点在圆外

相关推荐
武文斌778 分钟前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
爱吃喵的鲤鱼12 分钟前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
Digitally20 分钟前
如何通过 5 种有效方法同步 Android 和 Mac
android·macos
爱吃小胖橘36 分钟前
Unity网络开发--超文本传输协议Http(1)
开发语言·网络·网络协议·http·c#·游戏引擎
郝学胜-神的一滴44 分钟前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程
小火柴1231 小时前
利用R语言绘制直方图
开发语言·r语言
2301_803554521 小时前
C++联合体(Union)详解:与结构体的区别、联系与深度解析
java·c++·算法
pu_taoc1 小时前
深入剖析:基于epoll与主从Reactor模型的高性能服务器设计与实现
服务器·c语言·c++·vscode
csbysj20201 小时前
React 表单与事件
开发语言