Skip to main content

numerical integration - How to obtain the area enclosed by such a curve?


The desired curve is defined as curve02 below :


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;
ParametricPlot[Evaluate[curve02], {τ, 0, 5 π},
Exclusions -> None, MaxRecursion -> 15, PlotPoints -> 1000]


which can be visualized as:


enter image description here


How to obtain the area of its enclosed region? update


Green's theorem can solve another similar problem with high accuracy but does not suit this one, below is an example:


I tried to rewrite your original curve as below, just in order to make sure the derivatives of the parametric form can be obtained by Mathematica by avoiding Abs or Sign:


ncurve={(Cos[t]^2 )^(1/4),(Sin[t]^2)^(1/4)}

Then the numerical result of the closed area can be obtained by applying Green's theorem:


4*Quiet@NIntegrate[ncurve[[1]] D[ncurve[[2]], t], {t, 0, Pi/2}] // 

NumberForm[#, 15] &

which gives:



3.708149351621483




Answer



Do you wan the entire area enclosed by the outer envelope? A bit brute force, but note the 10-fold symmetry, so that only two arc segments define the outer boundary:


base = Line@Table[ curve02, {\[Tau], 0, 5 Pi, Pi/1000}];
r1 = FindRoot[ (curve02 /. \[Tau] -> x) == (curve02 /. \[Tau] ->

y), {x, .5}, {y, 5.5}];
p1 = y /. FindRoot[ (ArcTan @@ (curve02 /. \[Tau] -> y)) ==
3 Pi/ 10 , {y, .55}]
top = x /. FindRoot[ curve02[[1]] /. \[Tau] -> x , {x, 5}];
arc = Join[Table[ curve02 , {\[Tau], top, y /. r1 , .0001}],
Table[ curve02 , {\[Tau], x /. r1, p1 , .0001}]];
Graphics[{base, {Red,
Line[{curve02 /. \[Tau] -> top, {0, 0}, curve02 /. \[Tau] -> p1}],
Line@arc }}]


enter image description here


now the area of the polygon slice: ( by 10 gives the total ) (https://mathematica.stackexchange.com/a/22587/2079 )


PolygonSignedArea[pts_?MatrixQ] := Total[Det /@ Partition[pts, 2, 1, 1]]/2;
area = 10 PolygonSignedArea[Reverse@Join[{{0, 0}}, arc]]


7936.86



as noted in the comments, if we set the increment to 10^-6 this converges to the more sophisticated NIntegrate result of 7945.5


Comments