java求两个圆相交坐标
最近由于项目需要,根据两个圆函数求出相交的坐标。实现代码如下,另感谢两圆求交点算法实现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求两个圆相交坐标相关推荐
- java 圆的交点_java求两个圆相交坐标
最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...
- 平面上有两个圆相交,求两个圆相交部分的面积
平面上有两个圆相交,求两个圆相交部分的面积 又学习了一遍算法,感触颇深,也对算法有了更进一步的认识,记录一下这次的学习,希望能帮到有需要的人. 输入:六个参数:第一个圆的圆心坐标,半径,第二个圆的圆心 ...
- 算法分析课设(一)平面上有两个圆相交,求两个圆相交部分的面积
写出算法的文字描述 第一步:输入两个圆的参数 x1. y1. r1. x2. y2. r2. 第二步:计算两圆的距离d,然后分以下四种情况判断: 1.相离或相切.若d>=(r1+r2),则 s= ...
- python求交点坐标_Python求两个圆的交点坐标或三个圆的交点坐标方法
计算两个圆的交点 代码如下: # -*- coding: utf-8 -*- import math import numpy as np def insec(p1,r1,p2,r2): x = p1 ...
- java 求两线交点_JAVA求两直线交点和三角形内外心的编程代码
JAVA求两直线交点和三角形内外心的编程代码 一.求两直线交点 复制代码 代码如下: class Point { double x; double y; public Point() { this.x ...
- hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input 2 2 3 0 0 0 0 2 3 0 0 ...
- Java求两个数组的交集、差集、并集
目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...
- Java生成两个圆判断是否重叠,用java随机画出两个圆,判断它们是不是相交
用java随机画出两个圆,判断它们是否相交 import java.awt.*; import java.util.Random; import javax.swing.*; import javax ...
- js求两圆交点_如何求两个圆的交点坐标,请举例
展开全部 将两个圆62616964757a686964616fe4b893e5b19e31333431363563的方程相减,就消掉了x²,y²项,剩下一个关于x, y的一次方程,可解得y=kx+b. ...
最新文章
- [翻译]通过调用多个动作创建ASP.NET MVC视图
- Grunt的配置和使用
- JVM_04 对象的实例化+内存布局+访问定位+直接内存
- CCS5.5环境下使用clock()函数测试程序段运行时间
- Scala 基础(8)—— 占位符_和部分应用函数
- 关于用display:table让元素居中的小结
- 小学生都开始学Python了,你还不抓紧提升技术?
- python编程工时计算_Python编程题:两个日期间的天数统计(附代码)
- Spring AOP切面使用详细解析
- oc语言中的构造方法
- [GO]冒泡排序的原理和代码实现
- 通过IE私有滤镜让IE6 7 8支持背景透明,内容不透明效果
- 【图片】批量获取几万张图片
- Matlab无法使用GBK编码保存文件,改用UTF-8编码
- python xlwt模块下载_python 的xlwt模块
- 活出生命的意义-读后感
- [Linux]关于网卡配置文件
- Hadoop大数据平台开发与案例分析
- uni-app 使用 iconfont
- 如何从零开始制作一款日式AVG游戏