2
$\begingroup$

I would like to present Möbius transformations on the Riemann sphere. Having found the masterpiece answers to Mapping StreamPlot onto spherical surfaces, I am trying to adapt it to my case (those ones are about something slightly different - when the vector field is periodic to begin with).

This almost works, except I cannot regulate the density; it is either concentrated at the north pole, or features a bald spot around it:

Graphics3D[{StreamPlot[
 ReIm[(1 + I) (x + I y)], {x, -3, 3}, {y, -3, 3}][[1]] /. 
  Arrow[z_] :> 
   Arrow[z /. {x_Real, y_Real} :> {2 x, 2 y, x^2 + y^2 - 1}/(x^2 + y^2 + 1)], 
Opacity[.5], Sphere[]}, ImageSize -> 400, Boxed -> False]

results in

bald spot

while

Graphics3D[{StreamPlot[
 ReIm[(1 + I) (x + I y)], {x, -100, 100}, {y, -100, 100}][[1]] /. 
  Arrow[z_] :> 
   Arrow[z /. {x_Real, y_Real} :> {2 x, 2 y, x^2 + y^2 - 1}/(x^2 + y^2 + 1)], 
Opacity[.5], Sphere[]}, ImageSize -> 400, Boxed -> False]

(i. e. changing 3 to 100) leaves me with

concentrated

What would be the correct way to do it?

Later

Have tried to force stream points uniformly along several small concentric circles around origin. It is better but still messy, don't even know why...

Graphics3D[{StreamPlot[
 ReIm[(1 + 2 I) (x + I y)], {x, -100, 100}, {y, -100, 100}, 
 StreamPoints -> {
   Flatten[Table[2^-c {Cos[a], Sin[a]}, {a, 0, 2 \[Pi], \[Pi]/3}, {c, .2, .8, .2}], 1],
   500, 200}][[1]] /. 
  Arrow[z_] :> Arrow[z /. {x_Real, y_Real} :> {2 x, 2 y, x^2 + y^2 - 1}/(x^2 + y^2 + 1)], 
Opacity[.5], Sphere[]}, ImageSize -> 400, Boxed -> False]

enter image description here

$\endgroup$
  • $\begingroup$ "features a bald spot around it" - if the original StreamPlot[] is over a small domain (e.g. {x, -3, 3}, {y, -3, 3} in the first example), then it's no surprise you don't have much arrows near the point at infinity. $\endgroup$ – J. M. is away Mar 29 '18 at 5:39
  • $\begingroup$ @J.M. Yes it is probably that - but when I increase the domain it does all squeeze at the north pole $\endgroup$ – მამუკა ჯიბლაძე Mar 29 '18 at 5:42
  • $\begingroup$ Hmm, may I suggest using spherical coordinates at the outset? StreamPlot[ReIm[(1 + I) (Cot[ϕ/2] Exp[I θ])], {θ, 0, 2 π}, {ϕ, 0, π}] $\endgroup$ – J. M. is away Mar 29 '18 at 5:44
  • $\begingroup$ @J.M. OK then how to move it to the sphere?? $\endgroup$ – მამუკა ჯიბლაძე Mar 29 '18 at 5:46
  • $\begingroup$ I am trying to combine your suggestion with the formula from the linked answers but get something totally different $\endgroup$ – მამუკა ჯიბლაძე Mar 29 '18 at 5:49
2
$\begingroup$

As noted, one should already use the Riemann sphere representation of a complex number at the outset:

sp = First[StreamPlot[{{-Sin[θ], Cos[θ]}, {-Cos[θ], -Sin[θ]}}.
                      ReIm[(1 + I) (Cot[ϕ/2] Exp[I θ])], {θ, 0, 2 π}, {ϕ, 0, π}]];

Graphics3D[{{Opacity[.5], Sphere[]}, 
            sp /. Arrow[v_?MatrixQ] :> 
            Arrow[Tube[Function[{θ, ϕ}, {Sin[ϕ] Cos[θ], Sin[ϕ] Sin[θ], Cos[ϕ]}] @@@ v]]}, 
           Boxed -> False]

stream plot over the Riemann sphere

$\endgroup$
  • $\begingroup$ Thanks - but this is not the plot of the original transformation! $\endgroup$ – მამუკა ჯიბლაძე Mar 29 '18 at 5:58
  • $\begingroup$ Hmm, something's weird, even though the transformations check out. I'll look into it later. $\endgroup$ – J. M. is away Mar 29 '18 at 6:15
  • $\begingroup$ Must go like this $\endgroup$ – მამუკა ჯიბლაძე Mar 29 '18 at 6:45
  • $\begingroup$ Assuming I didn't mess up my Jacobians and everything, I think this should be correct now. $\endgroup$ – J. M. is away Mar 29 '18 at 14:10
  • 1
    $\begingroup$ Maybe I can write up how I derived the Jacobian later, and you might be able to figure what wrong assumptions I made? $\endgroup$ – J. M. is away Mar 30 '18 at 0:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.