日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 圆的交点_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=0

double a,b,c;

//x的兩個根 x_1 , x_2

//y的兩個根 y_1 , y_2

double x_1 = 0,x_2=0,y_1=0,y_2=0;

//判別式的值

double delta = -1;

//如果 y1!=y2

if(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;

}

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java 圆的交点_java求两个圆相交坐标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。