c语言判断圆相交
⑴ 用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;
}
这是一个方法,写代码时候调用该方法就可以了。