// a[i] 和 b[i]存放第 i 条公切线与 圆A 和 园B 的交点
// 返回值为切线的条数 如果没有切线返回值为-1
int getTangents(circle A, circle B, Point*a, Point *b){int cnt = 0;// 以A为半径更大的那个圆进行计算if(A.r < B.r) return getTangents(B, A, b, a);db d2 = (A.p-B.p).len2();  // 圆心距平方db rdiff = A.r - B.r;        // 半径差db rsum = A.r + B.r;        //半径和if(d2 < rdiff * rdiff) return 0;    // 情况1,内含,没有公切线Vector AB = B.p - A.p;               // 向量AB,其模对应圆心距db base = atan2(AB.y, AB.x);     // 求出向量AB对应的极角if(d2 == 0 && A.r == B.r) return -1;// 情况3,两个圆重合,无限多切线if(d2 == rdiff * rdiff){            // 情况2,内切,有一条公切线a[cnt] = A.point(base);          b[cnt] = B.point(base);cnt++;return 1;}// 求外公切线db ang = acos((A.r - B.r) / sqrt(d2)); //求阿尔法// 两条外公切线a[cnt] = A.point(base+ang); b[cnt] = B.point(base+ang); cnt++;a[cnt] = A.point(base-ang); b[cnt] = B.point(base-ang); cnt++;if(d2 == rsum * rsum){  // 情况5,外切,if里面求出内公切线a[cnt] = A.point(base); b[cnt] = B.point(pi+base); cnt++;}else if(d2 > rsum * rsum){ //情况6,相离,再求出内公切线db ang = acos((A.r + B.r) / sqrt(d2));a[cnt] = A.point(base + ang); b[cnt] = B.point(pi+base+ang);cnt++;a[cnt] = A.point(base - ang); b[cnt] = B.point(pi+base-ang);cnt++;}// 此时,d2 < rsum * rsum 代表情况 4 只有两条外公切线return cnt;
}

求两个圆公切线的模板相关推荐

  1. python求交点坐标_Python求两个圆的交点坐标或三个圆的交点坐标方法

    计算两个圆的交点 代码如下: # -*- coding: utf-8 -*- import math import numpy as np def insec(p1,r1,p2,r2): x = p1 ...

  2. java 圆的交点_java求两个圆相交坐标

    最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...

  3. 平面上有两个圆相交,求两个圆相交部分的面积

    平面上有两个圆相交,求两个圆相交部分的面积 又学习了一遍算法,感触颇深,也对算法有了更进一步的认识,记录一下这次的学习,希望能帮到有需要的人. 输入:六个参数:第一个圆的圆心坐标,半径,第二个圆的圆心 ...

  4. java求两个圆相交坐标

    最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...

  5. 两个圆公切线求法_求两圆的公切线计算

    关于两圆的公切线计算我们首先需要搞清楚的是两个圆之间有哪些位置关系,两个圆的位置包括内含.内切.外切.外离几种方式,可以看出位置关系可以根据"两圆心之间的距离"与"两圆半 ...

  6. 两个圆公切线求法_两圆的公切线教案

    两圆的公切线教案 第一课时 两圆的公切线(一) 教学目标: (1)理解两圆相切长等有关概念,掌握两圆外公切线长的求法: (2)培养学生的归纳.总结能力: (3)通过两圆外公切线长的求法向学生渗透&qu ...

  7. 两个圆公切线求法_两个圆的公切线

    两个圆的公切线 圆上任意一点拥有唯一的圆心角 struct circle{ Point p; double r; // 通过圆心角求圆上某一点 Point point(double a){ retur ...

  8. Python求两个圆的交点坐标或三个圆的交点坐标

    计算两个圆的交点代码如下 # -*- coding: utf-8 -*- import math import numpy as np def insec(p1,r1,p2,r2):x = p1[0] ...

  9. python两个同切圆_求两个圆的交点

    我试图在Python中找到两个圆之间的交集(使用Matplotlib),但是找不到任何值.在 为此,我为每个单独的圆创建X和Y的列表(Matplotlib在绘制圆时将第一个参数作为X值,第二个参数作为 ...

  10. js求两圆交点_如何求两个圆的交点坐标,请举例

    展开全部 将两个圆62616964757a686964616fe4b893e5b19e31333431363563的方程相减,就消掉了x²,y²项,剩下一个关于x, y的一次方程,可解得y=kx+b. ...

最新文章

  1. 【转】分享 97年世界编程大赛第一名写的程序
  2. 面向对象编程思想(2)--策略模式
  3. redis High Availability---Redis Sentinel翻译
  4. 由于供不应求 部分新款Apple Watch机型推迟至11月交付
  5. 阿里成立智能搜索业务部;任天堂:共有30万账号被黑客入侵;TiDB 3.1.2 发布| 极客头条...
  6. 20191010:希尔排序代码详解
  7. java线程——详解Callable、Future和FutureTask
  8. centos linux mysql 5.5脚本全自动源码包 编译安装
  9. 限制root远程登录
  10. 202206-2 寻宝大冒险
  11. IBATIS开发指南(夏昕)
  12. 【技能】excel小技巧:利用宏制作工资条
  13. Revit二次开发资料汇总
  14. 2022软件项目管理案例教程期末考知识点汇总(期末复习用)
  15. 打印机显示正在未连接服务器,打印机状态未联机是怎么回事
  16. 糗百文化:糗事百科的运营哲学
  17. C# Delegate引介
  18. 放款2500亿仅占1%,度小满要做消费金融拉动内需的新动力?
  19. ​【技术】机器视觉技术原理解析及应用领域
  20. 跳转到新页面并清除当前页面的history记录

热门文章

  1. UDS 0x22服务 DID增加流程
  2. 【open3d】 GLFW Error: WGL: Failed to make context current: 不支持请求的转换操作
  3. PyTorch搭建LSTM实现多变量多步长时间序列预测(二):单步滚动预测
  4. 脉冲时间宽度c语言,什么是脉冲宽度_脉冲宽度是什么意思
  5. 玩转PS路径,轻松画logo!
  6. C#实战之CAD二次开发002:绘制直线和绘制圆
  7. 【原创】《矩阵的史诗级玩法》连载十七:用矩阵研究二次贝塞尔曲线和抛物线的关系(上)
  8. 阿里云监控列表和内存使用率数据展示为N/A,怎么办?
  9. 我是这样搞懂一个神奇的BUG
  10. addClass添加类名称