最近由于项目需要,根据两个圆函数求出相交的坐标。实现代码如下,另感谢两圆求交点算法实现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. 自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)
  2. 动态调用WCF不添加服务(svcutil.exe)
  3. Spark安装与学习
  4. hadoop容灾能力测试
  5. 全国计算机等级考试题库二级C操作题100套(第24套)
  6. istio回归「单体应用」对我们的启发
  7. spine 导出纹理_Spine 纹理打包Texture packing_官方文档中文版
  8. docker停止容器后配置_Docker 自学笔记 - april_aaa
  9. 3G手机Android应用开发视频教程_黎活明老师的视频(第三天课程)总共有八天课程...
  10. 计算机中¥符号按哪个键,在电脑设计中人民币¥这个符号咋弄出来
  11. python debug run 结果不同_Python:PyCharm中运行与调试模式下的不同行为
  12. 修改数据表DataTable某一列的类型和记录值
  13. [代码]POJ 2409 Let it Bead
  14. su室内插件_SketchUp必学插件TOP100,每一个都是[室内/装饰/景观]设计的效率神器...
  15. nginx源码下载、编译和安装
  16. 冉宝的leetcode笔记--每日一题 8月1日
  17. Spring报错 Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException
  18. 【蜂鸟E203的FPGA验证】Chap.8 Vivado综合与性能分析-Vivado性能分析
  19. 价格暴涨却一车难求,春节租车比卖车好做?
  20. 09 数据卷容器(实现数据同步)

热门文章

  1. 惠普HP ENVY 4505 打印机驱动
  2. NOJ [1527] 你的狗尾巴草呢
  3. Linux下的压缩解压缩
  4. win10计算机策略禁止用户安装,win10系统使用组策略禁止用户安装软件的操作方法...
  5. OSG学习:用多通道(multiple passes)实现透明度
  6. Scala:给定成绩单,使用scala编程完成以下分析工作:(1)统计出各门课程的平均成绩,最低、高成绩,及格率;(2)男女同学分开, 分别统计各门课程的平均成绩,最低成绩,最高成寄鸡Official
  7. python按照绝对值排序_Python高阶函数sorted排序
  8. MBSE和刚亮相的B-21“突袭者”隐形轰炸机
  9. c语言地址强制转为指针,C语言:指针类型强制性转换
  10. 电脑无法连接隐藏式wifi