當前位置:首頁 » 編程語言 » c語言判斷圓相交

c語言判斷圓相交

發布時間: 2022-12-12 21:42:55

⑴ 用c語言編寫「求兩個圓之間的距離,相離,相切或相交」

#include<stdio.h>
#include<math.h>
intmain()
{doublex1,x2,y1,y2,r1,r2,d;
printf("請輸入圓1的圓心坐標和半徑:");
scanf("%lf%lf%lf",&x1,&y1,&r1);
printf("請輸入圓2的圓心坐標和半徑:");
scanf("%lf%lf%lf",&x2,&y2,&r2);
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if(d>r1+r2)printf("兩圓相離 ");
elseif(d<r1+r2)printf("兩圓相交 ");
elseprintf("兩圓相切 ");
return0;
}

⑵ C語言 判斷圓語言的位置關系

圓1:圓心(x1,y1),半徑r1; 園2:(x2,y2),r2;
if (sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))>fabs(r2-r1))>0 printf("相交"); else printf("不相交")

⑶ c語言程序求二維坐標中兩圓的面積及是否相交

經典題。網上答案很多,給你抄一個:
假設半徑小的圓為c1,半徑大的圓為c2。
c1的半徑r1,圓心坐標(x1,y1)。c2的半徑r2,圓心坐標(x2,y2)。
d為兩圓圓心連線的長度。
相交面積為S
d=sqrt((x1-x2)^2+(y1-y2)^2)
(1)如果r1+r2<=d
那麼兩圓相離,相交面積S=0
(2)如果r2-r1>=d
那麼半徑小的圓內含半徑大的圓,那麼相交面積為小圓的面積S=pi*r1*r1
(3)既非(1)也非(2)
在圖上畫兩個相交圓,結合圖像看。
那麼兩圓相交,連接小圓的圓心與兩個圓的交點,連接大圓的圓心和兩個圓的交點。
可以發現形成的圖形被兩個圓心的連線平分成2個全等三角形。
由小圓圓心和交點所連兩條線(長度為半徑)以及在大圓之內的弧所形成的扇形為S1
由大圓圓心和交點所連兩條線(長度為半徑)以及在小圓之內的弧所形成的扇形為S2
由小圓圓心和交點所連兩條線以及由大圓圓心和交點所連兩條線所形成的四邊形的面積為S3
可見相交面積S=S1+S2-S3
要求出扇形的面積,要知道扇形的圓心角。
小圓包含的扇形的圓心角為2*a1(考慮一個三角形)
a1=acos((r1^2+d^2-r2^2)/(2.0*r1*d)) 餘弦定理
a2=acos((r2^2+d^2-r1^2)/(2.0*r2*d))
S1=pi*r1*r1*2*a1/(2*pi)=a1*r1*r1
同理
S2=a2*r2*r2
S3為一個三角形面積的2倍
S3=2*r1*d*sin(a1)/2=r1*d*sin(a1)
則S=a1*r1*r1+a2*r2*r2-r1*d*sin(a1)
代碼:

#define pi acos(-1.0)
#define maxn 10
struct node{
double x;
double y;
double r;
} c[maxn];

double area(int i,double r1,int j,double r2){
double d=
sqrt((c[i].x-c[j].x)*(c[i].x-c[j].x)+(c[i].y- c[j].y)*(c[i].y-c[j].y));//圓心距
if(r1>r2){
double temp=r1;
r1=r2;
r2=temp;
}//r1取小
if(r1+r2<=d)
return 0;//相離
else if(r2-r1>=d)
return pi*r1*r1;//內含
else {
double a1=acos((r1*r1+d*d-r2*r2)/(2.0*r1*d));
double a2=acos((r2*r2+d*d-r1*r1)/(2.0*r2*d));
return (a1*r1*r1+a2*r2*r2-r1*d*sin(a1));
}//相交
}
=======
如果只有2個圓,前面可用:
#define maxn 2
main()
{
輸入或賦值 c[0].x, c[0].y,c[0].r, c[1].x, c[1].y,c[1].r,
調用 參數:i=0;r1=c[0].r; j=1;r2=c[1].r;
調用:
printf("Area=%lf", area(0,c[0].r,1,c[1].r) );
}

⑷ 如何用c語言求解2個圓的交點呢 圓的方程已知 請具體給個例子吧

圓一 x^2 + y^2 + a1x + b1y +c1 = 0;
圓二 x^2 + y^2 + a2x+ b2y + c2 = 0;
a,b,c已知 ;
先相減 (a1-a2) x + (b1-b2) y + (c1-c2) = 0;
從而可以得到y = ex + f; e,f 已知;如果a1=a2,或者b1 =b2則可以直接求出x或者y值
代入圓一可以直接求x

⑸ 如何用C語言判斷直線與圓的關系,並計算相交時兩部分的面積

#include<stdio.h>

#include<math.h>//數學函數頭文件

#define PI 3.14//定義圓周率

int main()

{

double x1,y1,x2,y2,x3,y3,r;

double d;

printf("輸入確定一條直線的兩個坐標: ");

scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);

printf("輸入圓心坐標和圓的半徑: ");

scanf("%lf%lf%lf",&x3,&y3,&r);

d=abs((y1-y2)*x3+(x2-x1)*y3+x1*y2-x2*y1)/sqrt(pow(y1-y2,2)+pow(x2-x1,2));//圓心的到直線的距離

printf("圓心到直線的距離:%.2lf ",d);

if(d==r)

{

printf("直線與圓相切 ");

}

if(d<r)

{

double x,S_max,S_min;

x=acos(d/r)*180.0/PI;//反三角函數計算扇形的度數,用於下面求兩部分的面積

S_max=(360-2*x)*PI*r*r/360+d*sqrt(r*r-d*d);

S_min=2*x*PI*r*r/360-d*sqrt(r*r-d*d);

printf("直線與圓相交 直線將圓分為兩部分,大部分面積:%.2f 小部分面積:%.2f ",S_max,S_min);

}

if(d>r)

{

printf("直線與圓相離 ");

}

return 0;

}

⑹ 判斷兩圓是否相交 用c 語言

#include <stdio.h>
#include <math.h>

int main(void)
{
float x1, y1, x2, y2, r1, r2;
scanf("%f %f %f", &x1, &y1, &r1);
scanf("%f %f %f", &x2, &y2, &r2);

float len = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if (len < (r1+r2))
{
printf("yes\n");
}
else
printf("no\n");

return 0;
}

⑺ 求acm有關判斷圓和矩形是否相交的演算法、c語言/c++

依次判斷矩形的四條邊是否和圓相交。矩形邊分別平行於x軸y軸,這就非常簡單了。比如橫邊,可以用它的縱坐標代入圓方程,求出圓上相應的兩個橫坐標,與矩形的左右橫坐標比較。

⑻ 計算兩圓的相交面積 c語言

#include<iostream>
#include<string>
#include<math.h>
#include<queue>
#include<set>
#include<algorithm>
using namespace std;
#define pi acos(-1.0)
int main()
{
double x1,y1,r1,x2,y2,r2;
double d,temp,a1,a2;
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2)!=EOF)
{
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//圓心距
if(r1>r2){
temp=r1; r1=r2; r2=temp;
}//r1取小
if(r1+r2<=d)
printf("0.000\n");//相離
else if(r2-r1>=d)
printf("%.3f\n",pi*r1*r1);//內含
else {
a1=acos((r1*r1+d*d-r2*r2)/(2.0*r1*d));
a2=acos((r2*r2+d*d-r1*r1)/(2.0*r2*d));
printf("%.3f\n",a1*r1*r1+a2*r2*r2-r1*d*sin(a1));
}//相交
}
return 0;
}
試試這個

⑼ 用c語言判定兩個圓是否相交,

判斷圓心距離和半徑的和 差之間的關系就行了;
bool xiangjiao(int x1,int y1,int r1,int x2,int y2,int r2)
{
doule s;
s = sqrt(double((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1)));
if(int(s)<r2+r1&&int(s)>abs(r2-r1))
return true;
else
return false;
}
這是一個方法,寫代碼時候調用該方法就可以了。

熱點內容
隆地優選交易密碼是什麼 發布:2025-05-14 21:53:23 瀏覽:93
強酸強鹼存儲櫃 發布:2025-05-14 21:45:16 瀏覽:563
車輛參數配置包括什麼 發布:2025-05-14 21:31:03 瀏覽:163
怎麼引入安卓項目 發布:2025-05-14 21:26:39 瀏覽:824
游戲輔編程 發布:2025-05-14 21:18:49 瀏覽:687
三菱plc一段二段密碼什麼意思 發布:2025-05-14 21:17:16 瀏覽:528
電腦開機密碼忘記了怎麼破解 發布:2025-05-14 21:09:40 瀏覽:57
pythondict格式 發布:2025-05-14 21:09:38 瀏覽:886
落葉片拍攝腳本 發布:2025-05-14 20:40:49 瀏覽:799
安卓為什麼不能用cmwap 發布:2025-05-14 20:40:43 瀏覽:658