给出两圆的圆心坐标和半径, 求出两圆交点的坐标

如下图

可根据余弦定理求出角a的大小, 再根据函数atan2()可求出向量C1C2的方位角t

这样一来, 我们所求的交点就是以圆心C1.c为起点, 大小为c1.r ,角度为 t+a 和 t-a 的两个向量

程序代码参考

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
typedef struct node
{double x, y;
}NODE;
inline NODE Vector(NODE A, NODE B);
inline double dis2(NODE a, NODE b);
double angleA(NODE O1, double r1, NODE O2, double r2);
double angleT(NODE O1, NODE O2);
NODE polar(double a, double r);
int main()
{NODE O1, O2;double r1, r2;cin >> O1.x >> O1.y >> r1;cin >> O2.x >> O2.y >> r2;if (sqrt(dis2(O1,O2))>r1+r2){cout << "不存在交点" << endl;return 0;}double t = angleT(O1, O2);double a = angleA(O1, r1, O2, r2);NODE polar1 = polar(t+a,r1);NODE polar2 = polar(t-a, r1);NODE x1 = {O1.x+polar1.x,O1.y+polar1.y};NODE x2 = {O1.x+polar2.x,O1.y+polar2.y};cout << x1.x << ' ' << x1.y << ' '<<x2.x<<' '<<x2.y<<endl;return 0;
}
NODE polar(double a, double r)
{return{ r*cos(a), r*sin(a) };
}
double angleA(NODE O1, double r1, NODE O2,double r2)   //求角a
{return acos((r1*r1+dis2(O1,O2)-r2*r2)/(2*r1*sqrt(dis2(O1,O2))));  //余弦定理
}
double angleT(NODE O1,NODE O2)                      //求角t
{NODE O1O2 = Vector(O1, O2);return atan2(O1O2.y, O1O2.x);    //atan2(double y,double x) 计算向量O1O2与x轴的夹角 范围(-pi,pi]
}
inline NODE Vector(NODE A, NODE B)
{return{ B.x - A.x, B.y - A.y };
}
inline double dis2(NODE a, NODE b)
{return (b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y);
}

参考书籍: 挑战程序设计竞赛2

[计算几何] 圆与圆的交点坐标相关推荐

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

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

  2. [计算几何] (二维)圆与直线的交点

    给出圆心O的坐标, 和半径r, 再给出点A,B的坐标构成直线AB, 求出圆与直线AB交点的坐标 如下图 Step1: 首先求出圆心c在直线l 上的投影点pr的坐标 可通过求解向量p1pr(p1pr的长 ...

  3. C++三角定位法求两圆交点坐标

    已知:两个圆相交,圆心坐标,半径 求:两个圆的交点坐标 IDE:VS2019 三角定位法代码如下如下: 数学推理过程动手画图即可明白.变量含义注释已标明. 畅所欲言,欢迎指正 既来之,则赞之~

  4. 求解两圆相交的交点坐标

    今天遇到了一个问题,要求两个相交圆的交点坐标,用了三种不同方法求解,其中纯代数方法求解比较麻烦,这里没有贴出来.暂时只推导了公式,明天再写程序,程序写好后会更新到博客,如果大家有其它的方法,欢迎一起探 ...

  5. python求交点坐标_Python - 两圆相交求交点坐标

    Python - 两圆相交求交点坐标 Max.Bai 2016-05-16 Python - 两圆相交求交点坐标 三轴机械臂求坐标问题,其实转化为平面问题就是两圆相交求交点问题,交点算出来就可以用反三 ...

  6. 计算几何之求圆与直线的交点

    求圆与直线的交点的方法是: 求圆心c在直线l上的投影点pr 求出直线l上的单位向量e 根据r和pr的长度来计算出圆内线段部分的一半base 用pr±base*e即得到答案 题目:CGL_7_D AC代 ...

  7. JAVA程序设计:求直线与圆的交点坐标

    其实圆与直线的交点方程并不难解,难得是算法实现,废话不多说,直接上代码: 核心类 /*** @Author: Zhangwenshun* @Description:* @Date: Created i ...

  8. 计算几何之圆与圆的交点

    计算圆与圆的交点,需要用到余弦定理 步骤如下: 求出两个圆的圆心距d 求出向量c2.c-c1.c与c1.c到某交点的向量夹角a 求出向量c2.c-c1.c与x轴的夹角t 那么,两个交点就分别是以c1. ...

  9. 求过圆心直线与圆的两个交点

    主要是注意所使用的数据类型. 之前用的是float,出现了一些意外,而且花费了我不少时间来反复验证.推导, 做了很多的无用功,而且,反复推导得出来的计算步骤并没有什么不牢靠的地方. 然后计算得到的结果 ...

  10. lisp取两直线交点画圆_求过圆心直线与圆的两个交点

    主要是注意所使用的数据类型. 之前用的是float,出现了一些意外,而且花费了我不少时间来反复验证.推导, 做了很多的无用功,而且,反复推导得出来的计算步骤并没有什么不牢靠的地方. 然后计算得到的结果 ...

最新文章

  1. HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
  2. python输出乘法口诀-python以不同方式打印输出九九乘法表
  3. python里unexpected eof while parsing_使用Python编程时的10个注意事项
  4. Comet---“服务器推”技术实现
  5. linux lzo 压缩文件,Linux常用压缩和解压命令
  6. linux64bit安装mysql、jdk、nodejs、nginx笔记
  7. 在Ubuntu中为root用户启用界面登录
  8. 绕过SQL注入限制的方法
  9. MySQL必知必会(二)
  10. Applese 的毒气炸弹(最小生成树)
  11. 虚拟IP与arp协议
  12. Nmap进行主机探测出现网段IP全部存活情况分析
  13. 【李宏毅机器学习2021】Task02 回归
  14. 死亡之ping(Ping of Death)
  15. 手机网页通过js打开app
  16. k8s的namespace资源一直terminating问题解决
  17. 1011 A+B 和 C (15分)(输出格式 数据类型范围)
  18. Medium无限文章阅读会员插件
  19. 【Linux】【下载工具】Linux系统命令行下载工具汇总
  20. The Accidental HFT Firm

热门文章

  1. java p12 ssl_java读取双向证书(p12)证书向微信发送请求
  2. 利用java的网络编程实现一个小游戏(类似于石头剪刀布)
  3. 在Web页上模拟(QQ)魔法表情
  4. 在macbook上安装windows几种方案
  5. 【转】100种消灭无聊的方法,很有爱,看到第100个,我笑喷了
  6. nuscenes数据集关于毫米波雷达的操作
  7. 【windows】系统主机名、IP地址、Mac 地址、硬盘序列号
  8. Grbl命令,配置,接口,慢跑,激光相关知识
  9. Qt编写的小软件:一个模拟按键按下和鼠标(左键)按下的小工具
  10. 【操作】NUC电脑升级BIOS