用c++写的(实际上和C区别不大,就用了类封装了一些成员函数,可以很简单改成C)
创新互联公司自2013年起,先为乾安等服务建站,乾安等地企业,进行企业商务咨询服务。为乾安企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
三角形p1-o-a1是等腰直角三角形,并且斜边oa1在x轴上,p1在曲线上
那么p点所在的角为直角,|y1|等于|x1|,
我们在第一象限讨论如下:
易知y1=2,a1(4,0)=(2y1,0)
y2=x2-2y1,x2*y2=4,所以(y2)^2-2y1*y2=4,a2(2(y1+y2),0)
y3=x3-2(y1+y2),x3*y3=4,所以(y3)^2+2(y1+y2)*y3=4
..............................
(yn)^2+2*(sn-1)*yn=4(n=2,s1=y1=2)
(yn+1)^2+2*sn*(yn+1)=4(n=1,s1=y1=2)
整理:sn=2/(yn+1)-(yn+1)/2
y1=2,s1=2根1
y2=2根2-2根1,s2=2根2
y3=2根3-2根2,s3=2根3
y4=2根4-2根3,s4=2根4
.....................
y10=2根10-2根9,s10=2根10
所以y1+y2+.....+y10=2根10
----------------------------------------------------------------------
float func(float x,float k)//k为反比例常数
{
if ( x==0)
return 0;
else
return k/x;
}
经典题。网上答案很多,给你抄一个:
假设半径小的圆为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(r1r2){
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) );
}