Powierzchnie ekwipotencjalne za pomocą ParametricPlot
Więc próbuję wykreślić linie, na których następująca funkcja jest stałą $$ \frac{\left(-\Sigma (r,0.99,\theta )+2 r^2-0.99^2 r \sin ^2(\theta )\right)^2}{\Delta (r,1,0.99) \Sigma (r,0.99,\theta )^3}+\frac{0.99^4 \sin ^2(\theta ) \cos ^2(\theta ) \Delta (r,1,0.99)}{\Sigma (r,0.99,\theta )^4} $$ gdzie $$\Delta (r,M,a):=a^2-2 M r+r^2\quad\text{and}\quad\Sigma (r,a,\theta):=a^2 \cos ^2(\theta )+r^2. $$Używam następującego kodu, który był motywowany drugim komentarzem do tego postu
Σ[r_, a_, θ_] := r^2 + a^2*Cos[θ]^2;
Δ[r_, M_, a_] := r^2 - 2 M r + a^2;
cValues =
{0.01, 0.1, 0.08, 0.06, 0.003, 0.005, 0.12, 0.14, 0.2, 0.15, 0.02, 0.04,
0.03, 0.18, 0.22, 1.5, 2.3, 0.002, 0.0025, 0.003, 0.0015, 0.0018, 0.0023,
0.0011, 0.0009, 0.0008, 0.0007, 0.0006, 0.0005};
trajectories =
Function[{x, y, r, θ},
Σ[r, 0.99, θ]^(-3)*Δ[r, 1, 0.99]^(-1)*(2 r^2 -
Σ[r, 0.99, θ] - 0.99^2 r Sin[θ]^2)^2 +
Δ[r, 1, 0.99]*0.99^4*Σ[r, 0.99, θ]^(-4) Sin[θ]^2 Cos[θ]^2];
ParametricPlot[{Sqrt[r^2 + 0.99^2]*Sin[θ], r Cos[θ]}, {r, 0, 5}, {θ, 0, Pi/2},
PlotStyle -> {Green}, MeshFunctions -> {trajectories}, Mesh -> {cValues}]
i daje wynik, jak pokazano tutaj (druga jest pomniejszoną wersją pierwszego).
Jak widać, lewy dolny róg zachowuje się dziwnie i nie wiem dlaczego. Nie rozumiem też, co robi trajectoriesczęść tego kodu, a dokładniej, dlaczego Functionna początku ma 4 argumenty? Proszę pomóż.
(kontekst: próbuję wykreślić linie stałego przyspieszenia w czasoprzestrzeni Kerra)
Odpowiedzi
To MeshFunctionspotężna metoda, której zawsze używam.
Tutaj oglądamy Meshz 3D. Więc rysujemyParametricPlot3D $$\begin{cases}x=\sqrt{r^2+0.9801} \sin (\theta ),\\ y=r \cos (\theta ),\\ z=f(r,\theta)\end{cases}$$
Ustawiamy ViewPoint={0,0,Infinity}i używamyViewProjection -> "Orthographic"
Clear["`*"];
Σ[r_, a_, θ_] = r^2 + a^2*Cos[θ]^2;
Δ[r_, M_, a_] = r^2 - 2 M r + a^2;
f[r_, θ_] = Σ[r,
0.99, θ]^(-3)*Δ[r, 1,
0.99]^(-1)*(2 r^2 - Σ[r, 0.99, θ] -
0.99^2 r Sin[θ]^2)^2 + Δ[r, 1,
0.99]*0.99^4*Σ[r,
0.99, θ]^(-4) Sin[θ]^2 Cos[θ]^2;
cValues = {0.01, 0.1, 0.08, 0.06, 0.003, 0.005, 0.12, 0.14, 0.2, 0.15,
0.02, 0.04, 0.03, 0.18, 0.22, 1.5, 2.3, 0.002, 0.0025, 0.003,
0.0015, 0.0018, 0.0023, 0.0011, 0.0009, 0.0008, 0.0007, 0.0006,
0.0005};
ParametricPlot3D[{Sqrt[r^2 + 0.99^2]*Sin[θ], r Cos[θ],
f[r, θ]}, {r, 0, 5}, {θ, 0, π/2},
PlotPoints -> 150, MeshFunctions -> (#3 &), Mesh -> {cValues},
PlotStyle -> Green, ViewProjection -> "Orthographic",
ViewPoint -> {0, 0, ∞}, Lighting -> {White, "Neutral"}]
Jeśli chodzi o twoje pytanie, dlaczego trajectoriesma cztery argumenty: MeshFunctionsdla ParametricPlotpotrzeb trzech do czterech argumentów. Pierwsze dwa odpowiadają współrzędnym wykresu, ostatnie dwa (lub jeden) parametrom ParametricPlot.
Aby lepiej to docenić, rozważ następujący przykład:
funs = {
Function[{x, y, u, v}, x],
Function[{x, y, u, v}, y],
Function[{x, y, u, v}, u],
Function[{x, y, u, v}, v]
};
Row@Table[ParametricPlot[
{r Cos[\[Theta]], r Sin[\[Theta]]},
{r, 0, 1}, {\[Theta], 0, \[Pi]/2},
MeshFunctions -> fun,
Mesh -> 10,
ImageSize -> Small
], {fun, funs}
]
@Natas, chodzi o to, że ekwipotencjały nie są wykreślane we współrzędnych biegunowych, ale w pewnych specjalnych współrzędnych podobnych do współrzędnych biegunowych (spójrz na pierwszy argument w ParametricPlot, "ParametricPlot [{Sqrt [r ^ 2 + 0,99 ^ 2] * Sin [[Theta]], r Cos [[Theta]]}, ... ”). Dlatego zamiast ContourPlot zastosowano metodę ParametricPlot, która pozwala na użycie współrzędnych zdefiniowanych przez użytkownika, które nie są wbudowane w Mathematica. Za pomocą współrzędnych biegunowych można przeprowadzić transformację na współrzędne kartezjańskie „Polar” -> „Kartezjańskie”, ponieważ są one wbudowane w Mathematica, ale nie ze współrzędnymi zdefiniowanymi przez użytkownika, co ma miejsce w tym pytaniu. Nie jestem pewien, czy ContourPlot obsługuje współrzędne zdefiniowane przez użytkownika