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:
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 }}]
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
Post a Comment