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

文章目录


前言

本篇主要是用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、点在圆外

相关推荐
m0_748255021 小时前
基于python对网页进行爬虫简单教程
开发语言·爬虫·python
小林爱1 小时前
【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
android·java·前端·kotlin·intellij-idea·compose·多平台
hacker7073 小时前
探索数据的艺术:R语言与Origin的完美结合
开发语言·r语言·origin
炸鸡配泡面3 小时前
Qt 12.28 day3
java·开发语言
get_money_3 小时前
代码随想录38 322. 零钱兑换,279.完全平方数,本周小结动态规划,139.单词拆分,动态规划:关于多重背包,你该了解这些!背包问题总结篇。
java·开发语言·笔记·算法·动态规划
mahuifa5 小时前
C++(Qt)软件调试---VS性能探查器(27)
c++·qt·内存泄漏·vs性能探查器·cpu性能分析
不听话的好孩子5 小时前
基于深度学习(HyperLPR3框架)的中文车牌识别系统-Qt开发UI
开发语言·qt·ui
天马行空_5 小时前
周记-唐纳德的《计算机程序设计艺术》
c++
SomeB1oody6 小时前
【Rust自学】7.6. 将模块拆分为不同文件
开发语言·后端·rust
向宇it6 小时前
【从零开始入门unity游戏开发之——C#篇36】C#的out协变和in逆变如何解决泛型委托的类型转换问题
java·开发语言·unity·c#·游戏引擎