创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容💖:
专栏:c语言之路重点知识整合
【c语言】全部知识点总结
目录
- 一、创建点类
- 二、创建设置、获取属性的函数
- 三、创建全局函数
- 题目分析
- 四、测试执行
- 全部完整代码
- 注意类声明顺序
设计点类 和圆类,判断 点和圆的关系
一、创建点类
根据题目,先创建一个点类,属性有点的x、y坐标
并且为了实现“可控制的访问”,将属性的访问权限设置为private
如果直接设置成公有的,别人随意就能修改
class CPoint //点类
{
private:
//点的坐标
double m_x;
double m_y;
};
然后创建一个圆类,属性有圆的半径
和圆心坐标
由于圆心坐标是一个点类型的数据,可以直接使用点类CPoint
创建一个点对象作为圆类中的属性
class CCricle //圆形类
{
private:
double m_r; //圆的半径
CPoint m_Center; //圆心坐标
二、创建设置、获取属性的函数
根据点类的属性x、y坐标
,创建对应的设置x、y坐标
和获取x、y坐标
的函数
访问权限为public
为了让类的使用者只能通过设计者提供的接口去修改类的属性
public:
//设置x的坐标
void setX(double x)
{
m_x = x;
}
//设置y的坐标
void setY(double y)
{
m_y = y;
}
//获取x的坐标
double getX()
{
return m_x;
}
//获取y的坐标
double getY()
{
return m_y;
}
根据圆类的属性半径、圆心点
,创建对应的设置半径、圆心点
和获取半径、圆心点
的函数
public:
//设置半径
void setm_r(double r)
{
m_r = r;
}
//获取半径
double getm_r()
{
return m_r;
}
//设置圆心点
void setCenter(CPoint center)
{
m_Center = center;
}
//获取圆心点
CPoint getCenter()
{
return m_Center;
}
};
三、创建全局函数
题目分析
点和圆的关系可以有以下几种情况
点和圆的关系
- 点到圆心的距离 == 半径 点在圆上
- 点到圆心的距离 > 半径 点在圆外
- 点到圆心的距离 < 半径 点在圆内
点到圆心的距离 == (x1-x2)2 +(y1-y2)2与 m_r2相比
根据题目要求创建行为函数:
- 获取点到圆心距离
通过点到圆的坐标平方相减计算 方便后续计算进行平方
//获取点到圆心距离
double juli(CPoint point, CPoint center)
{
return (point.getX() - center.getX()) * (point.getX() - center.getX())
+ (point.getY() - center.getY()) * (point.getY() - center.getY()); //(x1 - x2)^2 + (y1 - y2)^2
}
- 判断点和圆的关系
通过(x1-x2)^2^ +(y1-y2)^2^
与 m_r^2^
进行比较,判断点和圆的关系
//判断点和圆的关系
void isRelation(CPoint& point, CCricle& cricle)
{
double distance = (point.getX() - cricle.getCenter().getX()) * (point.getX() - cricle.getCenter().getX())
+ (point.getY() - cricle.getCenter().getY()) * (point.getY() - cricle.getCenter().getY());
double rr = (cricle.getm_r()) * (cricle.getm_r());
if (distance > rr)
{
cout << "点在圆外" << endl;
}
else if (distance < rr)
{
cout << "点在圆内" << endl;
}
else
{
cout << "点在圆上" << endl;
}
}
四、测试执行
在主函数中使用CCricle
圆类创建一个圆对象,再通过调用类成员函数setm_r()
设置圆的半径
设置圆心时,由于圆心被定义为点类,使用点类CPoint
创建圆心对象,并setCenter()
设置圆心及坐标
调用全局函数isRelation()
判断点和圆的关系
全部完整代码
#include <iostream>
#include <string>
using namespace std;
/*
点和圆的关系
点到圆心的距离 == 半径 点在圆上
点到圆心的距离 > 半径 点在圆外
点到圆心的距离 < 半径 点在圆内
点到圆心的距离 == (x1-x2)~2+(y1-y2)~2 与 m_r~2相比
*/
class CPoint //点类
{
private:
//点的坐标
double m_x;
double m_y;
public:
//设置x的坐标
void setX(double x)
{
m_x = x;
}
//设置y的坐标
void setY(double y)
{
m_y = y;
}
//获取x的坐标
double getX()
{
return m_x;
}
//获取y的坐标
double getY()
{
return m_y;
}
};
class CCricle //圆形类
{
private:
double m_r; //圆的半径
CPoint m_Center; //圆心坐标
public:
//设置半径
void setm_r(double r)
{
m_r = r;
}
//获取半径
double getm_r()
{
return m_r;
}
//设置圆心点
void setCenter(CPoint center)
{
m_Center = center;
}
//获取圆心点
CPoint getCenter()
{
return m_Center;
}
};
//获取点到圆心距离
double juli(CPoint point, CPoint center)
{
return (point.getX() - center.getX()) * (point.getX() - center.getX())
+ (point.getY() - center.getY()) * (point.getY() - center.getY()); //(x1 - x2)~2 + (y1 - y2)~2
}
//判断点和圆的关系
void isRelation(CPoint& point, CCricle& cricle)
{
double distance = (point.getX() - cricle.getCenter().getX()) * (point.getX() - cricle.getCenter().getX())
+ (point.getY() - cricle.getCenter().getY()) * (point.getY() - cricle.getCenter().getY());
double rr = (cricle.getm_r()) * (cricle.getm_r());
if (distance > rr)
{
cout << "点在圆外" << endl;
}
else if (distance < rr)
{
cout << "点在圆内" << endl;
}
else
{
cout << "点在圆上" << endl;
}
}
int main()
{
//创建圆
CCricle cricle1;
//设置半径
cricle1.setm_r(5.0);
//设置圆心
CPoint center1;
center1.setX(2.0);
center1.setY(4.0);
cricle1.setCenter(center1);
//创建点
CPoint point1;
point1.setX(1.0);
point1.setY(10.0);
isRelation(point1, cricle1);
return 0;
}
注意类声明顺序
如果一个类使用了另一个类定义对象,被包含的类的声明顺序应该在包含他的类之前
定义class CPoint
点类 需要在CCricle
使用CPoint
定义对象之前 CPoint m_Center; //圆心坐标
否则会出现m_Center
是未知重写说明符的编译错误
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |