- 注册时间
- 2021-11-19
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 9076
- 在线时间
- 小时
|
发表于 2023-8-15 09:39:49
|
显示全部楼层
- Clear["Global`*"];(*清除所有变量*)
- deg=Pi/180;(*角度制下1°所对应的弧度*)
- (*子函数,输入参数:半径,圆弧起始弧度,圆弧终止弧度(必须大于起始弧度,否则弓形面积计算有问题),输出:面积*)
- area[R_,ang1_,ang2_]:=Module[{mj1,mj2,out},
- mj1=1/2*R^2((ang2-ang1)-Sin[(ang2-ang1)]);(*弓形面积=扇形面积-三角形面积*)
- mj2=1/2*R^2*Abs[(Cos[ang2]-Cos[ang1])*(Sin[ang2]-Sin[ang1])];(*弓形所对应的三角形面积(取了绝对值,肯定为正)*)
- out=mj1+mj2
- ]
- (*--------------------第01种情况,S的对面面积=20(逆时针从第一象限面积依次是12、S、25、20)*)
- (*计算三个面积表达式*)
- a12=area[R,a,b]//Simplify
- a25=area[R,Pi-a,2*Pi-b]//Simplify
- a20=area[R,2*Pi-b,2*Pi+a]//Simplify
- (*牛顿迭代法求解圆的半径与两个角度*)
- ans=FindRoot[{a12==12,a25==25,a20==20},{{R,4},{a,10deg},{b,80deg}},WorkingPrecision->20]
- mj=Pi*R^2-(12+25+20)/.ans(*用圆的面积减去三个面积=需要求的面积*)
- {a,b}/deg/.ans(*看看求解出来的角度制下的角度*)
- (*--------------------第02种情况,S的对面面积=25(逆时针从第一象限面积依次是12、S、20、25)*)
- (*计算三个面积表达式*)
- a12=area[R,a,b]//Simplify
- a20=area[R,Pi-a,2*Pi-b]//Simplify
- a25=area[R,2*Pi-b,2*Pi+a]//Simplify
- (*牛顿迭代法求解圆的半径与两个角度*)
- ans=FindRoot[{a12==12,a25==25,a20==20},{{R,4},{a,10deg},{b,80deg}},WorkingPrecision->20]
- mj=Pi*R^2-(12+25+20)/.ans(*用圆的面积减去三个面积=需要求的面积*)
- {a,b}/deg/.ans(*看看求解出来的角度制下的角度*)
- (*--------------------第03种情况,S的对面面积=12(逆时针从第一象限面积依次是20、S、25、12)*)
- (*计算三个面积表达式*)
- a20=area[R,a,b]//Simplify
- a25=area[R,Pi-a,2*Pi-b]//Simplify
- a12=area[R,2*Pi-b,2*Pi+a]//Simplify
- (*牛顿迭代法求解圆的半径与两个角度*)
- ans=FindRoot[{a12==12,a25==25,a20==20},{{R,4},{a,10deg},{b,80deg}},WorkingPrecision->20]
- mj=Pi*R^2-(12+25+20)/.ans(*用圆的面积减去三个面积=需要求的面积*)
- {a,b}/deg/.ans(*看看求解出来的角度制下的角度*)
复制代码
升级了一下我的代码,让子函数更简单易用!让子函数用起来更不容易错
(*--------------------第01种情况,S的对面面积=20(逆时针从第一象限面积依次是12、S、25、20)*)
{R->4.8000946072772487659,a->0.19352372398043376605,b->1.4795625234825034378}
15.38514805508871342
{11.088092619733534828,84.772688121273200768}
这是第一个结果
对应交点在第一象限
(*--------------------第02种情况,S的对面面积=25(逆时针从第一象限面积依次是12、S、20、25)*)
{R->4.5913303246846108866,a->0.28993724447113779927,b->1.6632572261023979991}
9.22576007016262607
{16.612180431848957528,95.297619300303904909}
这是第二个结果
对应交点在在第二象限
(*--------------------第03种情况,S的对面面积=12(逆时针从第一象限面积依次是20、S、25、12)*)
{R->5.5212959089422300071,a->-0.18048351024798338345,b->1.3040115682746180632}
38.77053631472971168
{-10.340943408915589452,74.714359298371209758}
这是第三个结果,
对应交点在第四象限
@王守恩 我现在的子函数改变了,应该更好用了,你可以拿去用了!
|
|