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

1.两个圆相交的数学求法

在中学数学中我们知道,一个圆可以作如下描述,以x1,y1为圆心,r为半径的一个圆:

那么假设现在有两个圆C1与C2,其中C1与C2的描述式如下:

其中C1是以(x1,y1)为圆心,r1为半径的圆,C2是以(x2,y2)为圆心,r2为半径的圆。若想求两个圆的交点,那么这个交点一同时在C1与C2上,即同时满足C1与C2的方程,此时只需联立这两个方程即可。

我们用C1-C2可得:

整理得:

此时

将上式代入C1,整理可得关于x的一元二次方程:

此后,只要求出该方程的判别式,进行一元二次方程的求解即可。

2.程序清单
根据1中的算法写出程序如下:

package com.ken.blesniff.util;import com.ken.blesniff.bean.Circle;/*** * @author lixiasong**/
public class CirIntersect {/*** 圆A   (x-x1)^2 + (y-y1)^2 = r1^2*/private Circle c1=null;/*** 圆B   (x-x2)^2 + (y-y2)^2 = r2^2*/private Circle c2=null;private double x1;private double y1;private double x2;private double y2;private double r1;private double r2;public CirIntersect(Circle C1,Circle C2){c1= C1;c2= C2;x1=c1.getX();y1=c1.getY();x2=c2.getX();y2=c2.getY();r1=c1.getR();r2=c2.getR();}/*** 求相交* @return {x1 , y1 , x2 , y2}*/public double[] intersect(){// 在一元二次方程中 a*x^2+b*x+c=0double a,b,c;//x的两个根 x_1 , x_2//y的两个根 y_1 , y_2double x_1 = 0,x_2=0,y_1=0,y_2=0;//判别式的值double delta = -1;//如果 y1!=y2if(y1!=y2){//为了方便代入double A = (x1*x1 - x2*x2 +y1*y1 - y2*y2 + r2*r2 - r1*r1)/(2*(y1-y2));double B = (x1-x2)/(y1-y2);a = 1 + B * B;b = -2 * (x1 + (A-y1)*B);c = x1*x1 + (A-y1)*(A-y1) - r1*r1;//下面使用判定式 判断是否有解    delta=b*b-4*a*c;if(delta >0){x_1=(-b+Math.sqrt(b*b-4*a*c))/(2*a);x_2=(-b-Math.sqrt(b*b-4*a*c))/(2*a);y_1 = A - B*x_1;y_2 = A - B*x_2;}else if(delta ==0){x_1 = x_2 = -b/(2*a);y_1 = y_2 = A - B*x_1;}else{System.err.println("两个圆不相交");return null;}}else if(x1!=x2){//当y1=y2时,x的两个解相等x_1 = x_2 = (x1*x1 - x2*x2 + r2*r2 - r1*r1)/(2*(x1-x2));a = 1 ;b = -2*y1;c = y1*y1 - r1*r1 + (x_1-x1)*(x_1-x1);delta=b*b-4*a*c;if(delta >0){y_1 = (-b+Math.sqrt(b*b-4*a*c))/(2*a);y_2 = (-b-Math.sqrt(b*b-4*a*c))/(2*a);}else if(delta ==0){y_1=y_2=-b/(2*a);}else{System.err.println("两个圆不相交");return null;}}else{System.out.println("无解");return null;}return new double[]{x_1,y_1,x_2,y_2};}
}

其中Circle类代码如下

package com.ken.blesniff.bean;/*** * @author lixiasong**/
public class Circle{private double x;private double y;private double r;public Circle(double X,double Y,double R){x=X;y=Y;r=R;}public double getX(){return x;}public double getY(){return y;}public double getR(){return r;}
}

工程文件参见java求两圆相交坐标
转载请注明文章出处:http://blog.csdn.net/u013780605/article/details/52673223

java求两个圆相交坐标相关推荐

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

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

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

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

  3. 算法分析课设(一)平面上有两个圆相交,求两个圆相交部分的面积

    写出算法的文字描述 第一步:输入两个圆的参数 x1. y1. r1. x2. y2. r2. 第二步:计算两圆的距离d,然后分以下四种情况判断: 1.相离或相切.若d>=(r1+r2),则 s= ...

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

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

  5. java 求两线交点_JAVA求两直线交点和三角形内外心的编程代码

    JAVA求两直线交点和三角形内外心的编程代码 一.求两直线交点 复制代码 代码如下: class Point { double x; double y; public Point() { this.x ...

  6. hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)

    两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input 2 2 3 0 0 0 0 2 3 0 0 ...

  7. Java求两个数组的交集、差集、并集

    目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...

  8. Java生成两个圆判断是否重叠,用java随机画出两个圆,判断它们是不是相交

    用java随机画出两个圆,判断它们是否相交 import java.awt.*; import java.util.Random; import javax.swing.*; import javax ...

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

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

最新文章

  1. [翻译]通过调用多个动作创建ASP.NET MVC视图
  2. Grunt的配置和使用
  3. JVM_04 对象的实例化+内存布局+访问定位+直接内存
  4. CCS5.5环境下使用clock()函数测试程序段运行时间
  5. Scala 基础(8)—— 占位符_和部分应用函数
  6. 关于用display:table让元素居中的小结
  7. 小学生都开始学Python了,你还不抓紧提升技术?
  8. python编程工时计算_Python编程题:两个日期间的天数统计(附代码)
  9. Spring AOP切面使用详细解析
  10. oc语言中的构造方法
  11. [GO]冒泡排序的原理和代码实现
  12. 通过IE私有滤镜让IE6 7 8支持背景透明,内容不透明效果
  13. 【图片】批量获取几万张图片
  14. Matlab无法使用GBK编码保存文件,改用UTF-8编码
  15. python xlwt模块下载_python 的xlwt模块
  16. 活出生命的意义-读后感
  17. [Linux]关于网卡配置文件
  18. Hadoop大数据平台开发与案例分析
  19. uni-app 使用 iconfont
  20. 如何从零开始制作一款日式AVG游戏

热门文章

  1. 如何判断一个男人是否靠谱?
  2. Android 输入英语单词实现(post网络请求)在线翻译,支持多种语言翻译
  3. linux 终端 浏览器_如何使用W3M从Linux终端浏览
  4. JProfiler分析
  5. 微信小程序ReferenceError:xxx is not defined报错
  6. 从键盘输入一个大写字母,显示对应的小写字母
  7. k8s自动扩缩容、健康检查、Qos、资源管理、亲和度、污点与宽容
  8. Swift基础——字符串简介
  9. 淘宝的下一步不如这样走
  10. i9 10885h和i7 10875h 哪个好