[计算几何] 圆与圆的交点坐标
给出两圆的圆心坐标和半径, 求出两圆交点的坐标
如下图
可根据余弦定理求出角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
[计算几何] 圆与圆的交点坐标相关推荐
- python求交点坐标_Python求两个圆的交点坐标或三个圆的交点坐标方法
计算两个圆的交点 代码如下: # -*- coding: utf-8 -*- import math import numpy as np def insec(p1,r1,p2,r2): x = p1 ...
- [计算几何] (二维)圆与直线的交点
给出圆心O的坐标, 和半径r, 再给出点A,B的坐标构成直线AB, 求出圆与直线AB交点的坐标 如下图 Step1: 首先求出圆心c在直线l 上的投影点pr的坐标 可通过求解向量p1pr(p1pr的长 ...
- C++三角定位法求两圆交点坐标
已知:两个圆相交,圆心坐标,半径 求:两个圆的交点坐标 IDE:VS2019 三角定位法代码如下如下: 数学推理过程动手画图即可明白.变量含义注释已标明. 畅所欲言,欢迎指正 既来之,则赞之~
- 求解两圆相交的交点坐标
今天遇到了一个问题,要求两个相交圆的交点坐标,用了三种不同方法求解,其中纯代数方法求解比较麻烦,这里没有贴出来.暂时只推导了公式,明天再写程序,程序写好后会更新到博客,如果大家有其它的方法,欢迎一起探 ...
- python求交点坐标_Python - 两圆相交求交点坐标
Python - 两圆相交求交点坐标 Max.Bai 2016-05-16 Python - 两圆相交求交点坐标 三轴机械臂求坐标问题,其实转化为平面问题就是两圆相交求交点问题,交点算出来就可以用反三 ...
- 计算几何之求圆与直线的交点
求圆与直线的交点的方法是: 求圆心c在直线l上的投影点pr 求出直线l上的单位向量e 根据r和pr的长度来计算出圆内线段部分的一半base 用pr±base*e即得到答案 题目:CGL_7_D AC代 ...
- JAVA程序设计:求直线与圆的交点坐标
其实圆与直线的交点方程并不难解,难得是算法实现,废话不多说,直接上代码: 核心类 /*** @Author: Zhangwenshun* @Description:* @Date: Created i ...
- 计算几何之圆与圆的交点
计算圆与圆的交点,需要用到余弦定理 步骤如下: 求出两个圆的圆心距d 求出向量c2.c-c1.c与c1.c到某交点的向量夹角a 求出向量c2.c-c1.c与x轴的夹角t 那么,两个交点就分别是以c1. ...
- 求过圆心直线与圆的两个交点
主要是注意所使用的数据类型. 之前用的是float,出现了一些意外,而且花费了我不少时间来反复验证.推导, 做了很多的无用功,而且,反复推导得出来的计算步骤并没有什么不牢靠的地方. 然后计算得到的结果 ...
- lisp取两直线交点画圆_求过圆心直线与圆的两个交点
主要是注意所使用的数据类型. 之前用的是float,出现了一些意外,而且花费了我不少时间来反复验证.推导, 做了很多的无用功,而且,反复推导得出来的计算步骤并没有什么不牢靠的地方. 然后计算得到的结果 ...
最新文章
- HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
- python输出乘法口诀-python以不同方式打印输出九九乘法表
- python里unexpected eof while parsing_使用Python编程时的10个注意事项
- Comet---“服务器推”技术实现
- linux lzo 压缩文件,Linux常用压缩和解压命令
- linux64bit安装mysql、jdk、nodejs、nginx笔记
- 在Ubuntu中为root用户启用界面登录
- 绕过SQL注入限制的方法
- MySQL必知必会(二)
- Applese 的毒气炸弹(最小生成树)
- 虚拟IP与arp协议
- Nmap进行主机探测出现网段IP全部存活情况分析
- 【李宏毅机器学习2021】Task02 回归
- 死亡之ping(Ping of Death)
- 手机网页通过js打开app
- k8s的namespace资源一直terminating问题解决
- 1011 A+B 和 C (15分)(输出格式 数据类型范围)
- Medium无限文章阅读会员插件
- 【Linux】【下载工具】Linux系统命令行下载工具汇总
- The Accidental HFT Firm