c++ 判断两圆位置关系
对于两圆的位置一般有五种关系:
(1) 外离:两圆的半径之和小于两圆圆心距离
(2) 外切:两圆的半径之和等于两圆圆心距离
(3) 相交:两圆的半径之和大于两圆圆心距离,两圆圆心距离大于两圆半径之差
(4) 内切:两圆的半径之差等于两圆圆心距离
(5) 内含:两圆的半径之差小于两圆圆心距离
具体实现C++代码如下:
#include<iostream>
#include<cmath>
using namespace std;
class Point {
private:
double m_x,m_y;
public:
void set(double x, double y) {
m_x = x; m_y = y;
}
double dispoint(Point& another) {
return hypot(m_x - another.m_x, m_y - another.m_y);
}
};
class Circle {
private:
double m_r;
Point p;
public:
void set(double x, double y) {
p.set(x, y);
}
void setr(double r) {
m_r = r;
}
int judge(Circle &another) {
double rr = m_r + another.m_r;
double rs = fabs(m_r - another.m_r);
double dis = p.dispoint(another.p);
if (rr == dis) return 1; //外切
else if (rr < dis) return 2; //外离
else if (dis<rr && dis>rs) return 3;//相交
else if (rs == dis) return 4;//内切
else if (rs > dis) return 5;//内含
}
};
void main() {
Circle c1, c2;
double x, y,r,jude;
cout << "请输入圆1x坐标:" << endl;
cin >> x;
cout << "请输入圆1y坐标:" << endl;
cin >> y;
c1.set(x, y);
cout << "请输入圆1半径:" << endl;
cin >> r;
c1.setr(r);
cout << "请输入圆2x坐标:" << endl;
cin >> x;
cout << "请输入圆2y坐标:" << endl;
cin >> y;
c2.set(x, y);
cout << "请输入圆2半径:" << endl;
cin >> r;
c2.setr(r);
jude = c1.judge(c2);
if (jude == 1) {
cout << "两圆相外切" << endl;
}
else if (jude == 3) {
cout << "两圆相交" << endl;
}
else if(jude == 2) {
cout << "两圆相外离" << endl;
}
else if (jude == 4) {
cout << "两圆相内切" << endl;
}
else if (jude == 5) {
cout << "两圆相内含" << endl;
}
system("pause");
}
c++ 判断两圆位置关系的更多相关文章
- POJ 1269 Intersecting Lines(判断两直线位置关系)
题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...
- HDU 6354--Everything Has Changed(判断两圆关系+弧长计算)
题目 题意:首先给定一个以原点为圆心,R为半径的圆,之后在给m个圆,这些圆可能会和原来的圆有所交集,计算开始的圆剩余区域的周长,不包括内部周长. 首先判定两圆关系,如果内含,直接加上圆的周长,如果相交 ...
- poj 1269 判断直线的位置关系
题目链接 题意 判断两条直线的位置关系,重合/平行/相交(求交点). 直线以其上两点的形式给出(点坐标为整点). 思路 写出直线的一般式方程(用\(gcd\)化为最简), 计算\(\begin{vma ...
- c++ 判断点和圆位置关系(类的声明和类的实现分开)
Point.h: #pragma onceclass Point{private: double p_x, p_y;public: void setXY(double x,double y); dou ...
- 判断两条直线的位置关系 POJ 1269 Intersecting Lines
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- JS魔法堂:判断节点位置关系
一.前言 在polyfill querySelectorAll 和写弹出窗时都需要判断两个节点间的位置关系,通过jQuery我们可以轻松搞定,但原生JS呢?下面我将整理各种判断方法,以供日后查阅. 二 ...
- 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#
个人亲自编写.测试,可以正常使用 道理看原文,这里不多说 网上找到的几篇基本都不能用的 C#代码 bool Equal(float f1, float f2) { return (Math ...
- poj1269---直线位置关系
题目大意:给你8个点,也就是两条直线,让你判断他们的位置关系 代码如下: #include <iostream> #include<cstdio> #include<cm ...
- LightOJ 1118--Incredible Molecules(两圆相交)
1118 - Incredible Molecules PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Lim ...
随机推荐
- 轻松学习JVM——垃圾回收器
原文链接:https://www.cnblogs.com/leefreeman/p/7402695.html 上一篇我们介绍了常见的垃圾回收算法,不同的算法各有各的优缺点,在JVM中并不是单纯的使用某 ...
- JAVA笔记18-容器之二增强的for循环(不重要)
JDK1.5增强的for循环(foreach??)
- xgboost使用细节
from http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模 ...
- 【javascript】生成二维码
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...
- 更好的构建 Node 服务的工具
更好的构建 Node 服务的工具 无论前端项目在打包后都发送给后台, 有时候自己想看看效果在运行 npm run build 后只是看到一个 build 文件夹,但是直接打开是无法浏览,因此需要开启一 ...
- D. Restore Permutation
D. Restore Permutation 就是给一个n个数的全排,然后bi记录比ai小且在排在ai前面的数的和,求ai 树状数组维护,二分 #include<bits/stdc++.h> ...
- mysql补0操作有什么意义?
比如我们在创建int的时候会使用int(10)这样的方式来定义某一个列,但是这样定义是没有任何意义的. Create Table showzerofill(Val1 INT(5) ZEROFILL, ...
- Zabbix通过SNMP监控HP Gen10服务器的硬件
http://www.zmzblog.com/monitor/zabbix-how-to-monitoring-hp-gen10-server-hardware.html
- squid的处理request和reply的流程
request处理: Breakpoint , SQUID_MD5Final ( digest= { (gdb) bt # SQUID_MD5Final ( digest= # ) at store_ ...
- VS2008重置默认环境
Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008命令提示 进入Common7\IDE,然后 ...