• 实验目的

学习友元函数的定义与调用,理解友元函数的意义。

  • 实验原理

  1. 友元函数时在类中用关键字 friend修饰的函数,是类的非成员函数,但是它可以通过对象名访问类的私有和保护成员
  2. 利用圆心距与两圆半径之间的关系来判断两圆的位置关系。假设dcdcdc为圆心距,RRR与rrr分别是两圆的半径,则:
    (1)dc>R+rdc > R + rdc>R+r,两圆外离;
    (2)dc=R+rdc = R + rdc=R+r,两圆外切;
    (3)∣R–r∣<dc<R+r|R – r| < dc < R + r∣R–r∣<dc<R+r,两圆相交;
    (4)dc=∣R–r∣dc = |R – r|dc=∣R–r∣,两圆内切;
    (5)0<=dc<∣R–r∣0 <= dc < |R – r|0<=dc<∣R–r∣,两圆内含。
  • 实验内容

题目:定义一个表示圆的类CircleCircleCircle,包含x,y,rx,y,rx,y,r三个私有变量,分别为圆心xxx坐标,圆心yyy坐标和圆半径。声明CircleCircleCircle类的两个友元函数distancedistancedistance和relationrelationrelation,分别计算两圆圆心位置和判断两圆位置关系。
要求

  1. 两圆的参数x,y,rx,y,rx,y,r从命令行读入;
  2. 程序具有健壮性;
  3. 测试五种位置关系。

注意:浮点数之间做比较考虑精度问题。

  • 实验结果(含源码)

#include <iostream>
#include <cmath>
using namespace std;class Circle {private:double x, y, r;
public:Circle() {double xx, yy, rr;cout << "Please enter the center coordinates (x,y) and the radius:" << endl;   //提示输入圆心坐标与半径cin >> xx >> yy >> rr;if (rr > 0) {       //检查圆半径值是否合理x = xx;y = yy;r = rr;cout << "center coordinates:" << "(" << x << "," << y << ") " << "radius:" << r <<"\n"<< endl;  //显示圆的坐标与半径}else {cout << "the radius is wrong " << endl;}}friend double distance(Circle &c1, Circle &c2);friend void relation(Circle &c1, Circle &c2);
};/* distance函数:计算两圆圆心距离 */
double distance(Circle &c1, Circle &c2) {double dc;dc = sqrt((c1.x - c2.x)*(c1.x - c2.x )+(c1.y - c2.y)*(c1.y - c2.y));return dc;
}/* relation函数:判断两圆位置关系 */
void relation(Circle &c1, Circle &c2) {if (distance(c1, c2) - (c1.r + c2.r)>0) {cout << "两圆外离" << endl;}else if (distance(c1, c2) == (c1.r + c2.r)) {cout << "两圆外切" << endl;}else if ((fabs(c1.r - c2.r) - distance(c1, c2)<0)  && (distance(c1, c2) - (c1.r + c2.r)<0)) {cout << "两圆相交" << endl;}else if (distance(c1, c2) == abs(c1.r - c2.r)) {cout << "两圆内切" << endl;}else {cout << "两圆内含" << endl;}
}int main()
{Circle C1; // 第一个圆Circle C2;   // 第二个园distance(C1, C2);    // 计算距离cout << "the distance of two circle is " << distance(C1, C2) << endl;relation(C1, C2);return 0;
}

依次输入两圆的坐标和半径
第一个圆圆心(0.1,0.1)(0.1, 0.1)(0.1,0.1),半径666
第二个圆圆心(10,10)(10,10)(10,10),半径111
代入公式计算,得圆心距离为14.000714.000714.0007,大于两圆半径之和,所以外离

同理,以下是另外4组测试数据



两圆圆心距离计算及位置关系判断(C++实现)相关推荐

  1. 已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解)

    已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解) 在一个二维平面上给定两个圆的圆心横纵坐标.半径共6个参数, 求交点. 这个问题无非是解二元二次方程组.普通二元二次方程联立消元求解的困难在于 ...

  2. 四面体内接圆圆心坐标计算模板

    四面体内接圆圆心的坐标计算模板 设四面体的四个点为A1,A2,A3,A4A1,A2,A3,A4A_1,A_2,A_3,A_4 AiAiA_i所对的面的面积为SiSiS_i AiAiA_i顶点的坐标为( ...

  3. 图形学常见的点、线、面位置关系判断算法及其代码实现

    图形学的基础之一就是计算几何,它没有理论数学那么高深莫测,而且它很有实践性.具体来说图形学除了常用的计算几何方法外,还涉及到向量.点线关系以及点与多边形关系求解等数学知识,还有一些平面几何的基本原理. ...

  4. 两个地理坐标距离计算

    操作步骤: 导包 使用geodesic()函数 或者使用great_circle from geopy.distance import great_circle, geodesic # 注意:两个函数 ...

  5. 在C++中计算经纬度(附34个城市两两间的距离计算结果)

    文章目录 计算说明 C++实现代码 计算结果 计算说明 本文使用C++根据输出两个城市的经纬度计算两地间的距离. 几点说明: 经度为E,如果开头为W则取负值: 纬度为N,如果开头为S则取负值: 为了避 ...

  6. 矩阵向量中两两间欧式距离计算

    目标:希望通过的矩阵运算就能得出矩阵向量中两两之间的欧式距离 欧氏距离公式: 一般而言,我们常见的欧式距离计算公式如下: a,b 对应的是两组不同的向量 dist(a,b)=(a1−b1)2+(a2− ...

  7. c++ 判断两圆位置关系

    对于两圆的位置一般有五种关系: (1) 外离:两圆的半径之和小于两圆圆心距离 (2) 外切:两圆的半径之和等于两圆圆心距离 (3) 相交:两圆的半径之和大于两圆圆心距离,两圆圆心距离大于两圆半径之差 ...

  8. 圆与圆的位置关系题目含答案_圆中考数学题汇总附答案

    圆中考数学题汇总附答案 圆的运算是我们必须掌握的一个数学考点,为了帮助大家更好地学习圆的相关考点,百分网小编为大带来一份圆的中考数学题汇总,附答案,有需要的同学可以看一看,更多内容欢迎关注应届毕业生网 ...

  9. 圆与圆的位置关系题目含答案_圆与圆的位置关系课时练习题(附答案)

    由莲山课件提供http://www.5ykj.com/ 资源全部免费温馨提示: 此套题为Word版,请按住Ctrl,滑动鼠标滚轴,调节合适的观看比例,答案解析附后.关闭Word文档返回原板块.课时提 ...

最新文章

  1. oracle上机题库_Oracle数据库考试试题库
  2. matlab 12位 显示不出来,求助大神,为何不同机器运行MATLAB结果不同
  3. linux脚本怎么退出while,linux中的while命令
  4. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  5. luogu2508 [HAOI2008]圆上的整点
  6. ArcGIS三种方式打断相交线------拓扑法
  7. [UnityShader基础]04.ColorMask
  8. power query时间函数(思维导图)
  9. 奇安信与360的恩怨情仇:A股决战企业安全
  10. java中的match函数_javascript中match函数的用法小结
  11. 2021年中式面点师(中级)最新解析及中式面点师(中级)模拟考试题库
  12. CentOS 7拨号上网(ADSL PPPoE)
  13. mysql 不等于 优化_Mysql优化
  14. matlab graythresh()函数使用的注意点
  15. 进入Ubuntu的命令行模式
  16. null对象打印为什么是null?
  17. [018]HackerRank系列 | Shell遍历某个字符串多种用法
  18. PUE的出现将在数据中心统一标准
  19. CISA考试内容有所改动
  20. 树莓派与STC12C5A60S2单片机之间的无线通信

热门文章

  1. 010机场等出租车排队时我该选择排哪队?
  2. 银博饮用水配送管理系统 v2.5.1 绿色
  3. CMake I 编译源文件的两种方式
  4. 三星android应用程序更新,基于Android 11:三星OneUI 3.0详细升级计划公布
  5. 一文了解什么是SOME/IP协议(超详细)
  6. 火车票订购指南 网络电话订省时又省心
  7. Matlab隐函数与参数方程绘图
  8. 让年轻用户发现自我,QQ音乐用智能语音识别引爆品牌社交传播
  9. STM32F4移植FreeRTOS V10.3.1
  10. linux 邮件客户端 n1,Linux中如何安装使用Nylas N1邮件客户端