标签:曲线 面积 微分几何 数值计算 mathematica
碰到这样的问题,感觉很神奇。
定子方程,短幅内摆线方程:
其中:
1.
2.
3.
4.
5.
6.
7.
8.
求如下转子曲线外轮廓所包围的面积。
这种情况,曲线太复杂了,符号计算的可能性太小,投入和收获之间不成比例。所以,近似的数值计算是合理的。
涉及两方面的主要问题:
1. 如何找出外轮廓;
2. 如何计算外轮廓包围的面积。
第一个问题,因为近似计算,用曲线
第二个问题,前面一篇博客刚刚提到,把要计算部分的轮廓离散化成多边形,然后用Shoelace公式计算多边形的面积即可。对应于代码中的 PolygonSignedArea
函数。
直接上代码:
ClearAll["Global`*"];
R = 48.78;
r = 8.13;
z1 = R/r;
z2 = 1 - z1;
e = 7.05;
f = r/e;
re = 12.6;
θ = ArcTan[Sin[z1 τ]/(f + Cos[z1 τ])] - τ;
φ = ArcSin[f Sin[θ + τ]] - θ;
ψ = z1/(z1 - 1) φ;
curve01 = {(R - r) Sin[τ] + e Sin[z2 τ] -re Sin[θ], (R - r) Cos[τ] - e Cos[z2 τ] +re Cos[θ]} // FullSimplify;
curve02 = {curve01[[1]] Cos[φ - ψ] - curve01[[2]] Sin[φ - ψ] - e Sin[ψ], curve01[[1]] Sin[φ - ψ] + curve01[[2]] Cos[φ - ψ] - e Cos[ψ]} // Simplify;
base = ParametricPlot[Evaluate[curve02], {\[Tau], 0, 5 \[Pi]},Exclusions -> None, MaxRecursion -> 15, PlotPoints -> 1000];
r1 = FindRoot[ (curve02 /. τ -> x) == (curve02 /. τ -> y), {x, .5}, {y, 5.5}];
p1 = y /. FindRoot[ (ArcTan @@ (curve02 /. τ -> y)) ==
3 Pi/ 10 , {y, .55}];
top = x /. FindRoot[ curve02[[1]] /. τ -> x , {x, 5}];
arc = Join[Table[ curve02 , {τ, top, y /. r1 , .0001}], Table[ curve02 , {τ, x /. r1, p1 , .0001}]];
Show[base,Graphics[{{Red, Line[{curve02 /.τ -> top, {0, 0}, curve02 /.τ -> p1}], Line@arc }}]];
PolygonSignedArea[pts_?MatrixQ] := Total[Det /@ Partition[pts, 2, 1, 1]]/2;
area = 10 PolygonSignedArea[Reverse@Join[{{0, 0}}, arc]];
Print[Style["Area is: ", Blue, 20],
Style[NumberForm[area, 10], Red, 23]];
Area is: 7936.859683
标签:曲线 面积 微分几何 数值计算 mathematica
原文地址:http://blog.csdn.net/stereohomology/article/details/46943819