Superfícies equipotenciais usando ParametricPlot

Oct 17 2020

Estou tentando traçar linhas nas quais a função a seguir é uma constante $$ \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} $$ Onde $$\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. $$Estou usando o seguinte código que foi motivado a partir do segundo comentário nesta postagem

Σ[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}]

e dá a saída conforme mostrado aqui (o segundo é a versão reduzida do primeiro).

Como você pode ver, o canto inferior esquerdo tem um comportamento estranho e não tenho certeza do porquê. Eu também não entendo o que a trajectoriesparte deste código está fazendo, mais precisamente porque o Functiontem 4 argumentos no início? Por favor ajude.

(contexto: estou tentando traçar as linhas de aceleração constante no espaço-tempo de Kerr)

Respostas

5 cvgmt Oct 17 2020 at 21:17

O MeshFunctionsé um poderoso método que eu uso sempre.

Aqui vemos o Mesh3D. Então, desenhamos oParametricPlot3D $$\begin{cases}x=\sqrt{r^2+0.9801} \sin (\theta ),\\ y=r \cos (\theta ),\\ z=f(r,\theta)\end{cases}$$

Nós configuramos ViewPoint={0,0,Infinity}e usamosViewProjection -> "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"}]

5 Natas Oct 17 2020 at 17:37

Quanto à sua pergunta sobre o porquê trajectoriestem quatro argumentos: MeshFunctionspara ParametricPlotprecisa de três a quatro argumentos. Os dois primeiros correspondem às coordenadas do gráfico, os dois últimos (ou um) aos parâmetros do ParametricPlot.

Para avaliar isso melhor, considere o seguinte exemplo:

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}
  ]

1 VTynianski Oct 17 2020 at 18:33

@Natas, a questão é que os equipotenciais não são plotados em coordenadas polares, eles são plotados em algumas coordenadas especiais semelhantes às coordenadas polares (dê uma olhada no primeiro argumento em ParametricPlot, "ParametricPlot [{Sqrt [r ^ 2 + 0,99 ^ 2] * Sin [[Theta]], r Cos [[Theta]]}, ... "). É por isso que o método ParametricPlot foi usado ao invés do ContourPlot, ele permite que você use coordenadas definidas pelo usuário que não estão embutidas no Mathematica. Com as coordenadas polares você pode realizar a transformação para coordenadas cartesianas "Polar" -> "Cartesianas", porque elas estão embutidas no Mathematica, mas não com coordenadas definidas pelo usuário, que é o caso nesta questão. Não tenho certeza, se ContourPlot suporta coordenadas definidas pelo usuário