C++编程,输入半径r,圆心坐标,多边形边数n,求出各个顶点坐标,并近似估算π值

C++编程,输入半径r,圆心坐标,多边形边数n,求出各个顶点坐标,并近似估算π值,第1张

如果这个多边形是正多边形,那么题目的解是比较容易求得的。因为每一条边所对的圆心角都是n分之360度,所以只要根据直角,三角形的求解方法,就可以算出每一个顶点的坐标。但是在这里让计算机计算指定角度的三角函数值时,需要使用派来进行计算的。

求解方程组即可,设点切点T(x,y)

1) T到圆心O(9,6)距离为25

2)PT与TO相切

会解出两个切点

>> [x y] = solve('(x-9)^2+(y-6)^2-25^2', '(x-1)(x-9)+(y-2)(y-6)')

 

x =

 

 9448472752332354265425053211902

 7301527247667645734574946788098

 

 

y =

 

 3540554495335291469149893576196

 7834445504664708530850106423804

经典题。网上答案很多,给你抄一个:

假设半径小的圆为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=pir1r1

(3)既非(1)也非(2)

在图上画两个相交圆,结合图像看。

那么两圆相交,连接小圆的圆心与两个圆的交点,连接大圆的圆心和两个圆的交点。

可以发现形成的图形被两个圆心的连线平分成2个全等三角形。

由小圆圆心和交点所连两条线(长度为半径)以及在大圆之内的弧所形成的扇形为S1

由大圆圆心和交点所连两条线(长度为半径)以及在小圆之内的弧所形成的扇形为S2

由小圆圆心和交点所连两条线以及由大圆圆心和交点所连两条线所形成的四边形的面积为S3

可见相交面积S=S1+S2-S3

要求出扇形的面积,要知道扇形的圆心角。

小圆包含的扇形的圆心角为2a1(考虑一个三角形)

a1=acos((r1^2+d^2-r2^2)/(20r1d)) 余弦定理

a2=acos((r2^2+d^2-r1^2)/(20r2d))

S1=pir1r12a1/(2pi)=a1r1r1

同理

S2=a2r2r2

S3为一个三角形面积的2倍

S3=2r1dsin(a1)/2=r1dsin(a1)

则S=a1r1r1+a2r2r2-r1dsin(a1)

代码:

#define pi acos(-10)

#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 pir1r1;//内含

else {

double a1=acos((r1r1+dd-r2r2)/(20r1d));

double a2=acos((r2r2+dd-r1r1)/(20r2d));

return (a1r1r1+a2r2r2-r1dsin(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) );

}

分别求出三点中某两点的垂直平分线方程,联立求出交点即为圆心

过三点(x1,y1)(x2,y2)(x3,y3)的圆的圆心(x,y)满足

2(x1-x2)x+2(y1-y2)y-x1^2+x2^2-y1^2+y2^2=0

2(x2-x3)x+2(y2-y3)y-x2^2+x3^2-y2^2+y3^2=0

以上就是关于C++编程,输入半径r,圆心坐标,多边形边数n,求出各个顶点坐标,并近似估算π值全部的内容,包括:C++编程,输入半径r,圆心坐标,多边形边数n,求出各个顶点坐标,并近似估算π值、matlab程序中已知圆M圆心坐标(9,6)半径2.5,以及圆外一点p(1,2)怎样求p点到圆M切线上的切点的坐标。、c语言程序求二维坐标中两圆的面积及是否相交等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10102038.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存