###################################################################### # Convenience functions for plotting. #@ xi_curve_xy xi_curve_xy := proc(p,s) local z; z := xi_curve(p,s); return([Re(z),Im(z)]); end: #@ xi_arc xi_arc := proc(p,a,b) plot(subs(a_H=a_H0,[Re(xi_curve(p,s)),Im(xi_curve(p,s)),s=a..b]),numpoints=200,args[4..-1]); end: #@ xi_circle xi_circle := proc(p) local q,t; q := p * (1 - sqrt(1-1/abs(p)^2) * exp(I*t)); plot([Re(q),Im(q),t=-arcsin(1/abs(p)) .. arcsin(1/abs(p))],args[2..-1]); end: #@ xi_curve_tikz xi_curve_tikz := proc(p,col_) local p0,r,d,x0,x1,y0,y1,m0,m1,theta,phi,col; if nargs > 1 then if type(col_,string) then col := sprintf("[%s]",col_); else col := sprintf("[%a]",col_); fi; else col := ""; fi; p0 := evalf(subs(a_H=a_H0,p)); r := evalf(abs(p0)); d := sqrt(r^2-1); theta := evalf(argument(-p0)); phi := evalf(arccos(d/r)); x0 := Re(p0); y0 := Im(p0); x1 := x0 + d * cos(theta-phi); y1 := y0 + d * sin(theta-phi); m0 := round(evalf((theta-phi)*180/Pi)); m1 := round(evalf((theta+phi)*180/Pi)); sprintf(" \\draw%s (%.3f,%.3f) (%.3f,%.3f) arc(%d:%d:%.3f);\n", col,x0,y0,x1,y1,m0,m1,d); end: ###################################################################### #@ make_HX_plot_tikz make_HX_plot_tikz := proc() local A,s,i,j,k,ii,x,y,col,c_offset,v_offset; global hyp_plot_tikz; A := map(op,[indices(v_H)]); A := remove(i -> (i = evalf(floor(i)) and not(type(i,integer))),A); s := cat( "\\begin{center}\n", " \\begin{tikzpicture}[scale=7]\n", " \\draw (0,0) circle(1);\n", " \\draw[blue] (-1,0) -- (1,0);\n", " \\draw[blue] (0,-1) -- (0,1);\n", " \\draw[green] (-0.707,-0.707) -- ( 0.707, 0.707);\n", " \\draw[green] (-0.707, 0.707) -- ( 0.707,-0.707);\n" ); for k in [0,3,4,7,8] do s := cat(s,xi_curve_tikz(c_H_p[k],c_colour[k])); col := sprintf("%a,dotted",c_colour[k]); for j from 1 to 3 do s := cat(s,xi_curve_tikz(I^j*c_H_p[k],col)); od: od: for i in A do if type(i,integer) then s := sprintf("%s \\fill[black](%.3f,%.3f) circle(0.007);\n", s,Re(v_H1[i]),Im(v_H1[i])); else s := sprintf("%s \\fill[gray!60](%.3f,%.3f) circle(0.007);\n", s,Re(v_H1[i]),Im(v_H1[i])); fi; od; s := cat(s, " \\draw( 0.30, 0.25) node{$c_1$};\n", " \\draw(-0.30, 0.25) node{$c_2$};\n", " \\draw( 0.80,-0.03) node{$c_5$};\n", " \\draw(-0.05, 0.80) node{$c_6$};\n" ); c_offset[0] := [ 0.32,-0.15]; c_offset[3] := [ 0.07, 0.10]; c_offset[4] := [ 0.22, 0.03]; c_offset[7] := [-0.01,-0.07]; c_offset[8] := [-0.06,-0.02]; for k in [0,3,4,7,8] do x := evalf(Re(c_H1[k](0.5))); y := evalf(Im(c_H1[k](0.5))); x := x + c_offset[k][1]; y := y + c_offset[k][2]; s := sprintf("%s \\draw(%.3f,%.3f) node{$c_{%d}$};\n", s,x,y,k); od: v_offset[ 0 ] := [ 0.06, 0.02]; v_offset[ 1 ] := [ 0.03, 0.03]; v_offset[ 1.1] := [-0.05,-0.03]; v_offset[ 2 ] := [-0.05, 0.01]; v_offset[ 2.1] := [ 0.06, 0.01]; v_offset[ 3 ] := [-0.05, 0.00]; v_offset[ 3.1] := [-0.05,-0.01]; v_offset[ 4 ] := [-0.05, 0.00]; v_offset[ 4.1] := [-0.06, 0.00]; v_offset[ 5 ] := [ 0.05, 0.00]; v_offset[ 5.1] := [-0.05, 0.00]; v_offset[ 6 ] := [-0.04, 0.00]; v_offset[ 7 ] := [ 0.04, 0.00]; v_offset[ 8 ] := [ 0.03,-0.03]; v_offset[ 9 ] := [-0.03,-0.03]; v_offset[10 ] := [-0.04,-0.03]; v_offset[10.1] := [-0.06,-0.03]; v_offset[11 ] := [-0.03,-0.03]; v_offset[11.1] := [ 0.06,-0.03]; v_offset[12 ] := [-0.07, 0.00]; v_offset[12.1] := [-0.06, 0.00]; v_offset[12.2] := [-0.06, 0.00]; v_offset[12.3] := [ 0.06, 0.00]; v_offset[13 ] := [ 0.01,-0.04]; v_offset[13.1] := [-0.06, 0.00]; v_offset[13.2] := [ 0.06, 0.00]; v_offset[13.3] := [-0.06, 0.00]; v_offset[14 ] := [ 0.00, 0.00]; for i in A do x := Re(v_H1[i]); y := Im(v_H1[i]); if not(type(v_offset[i],indexed)) then x := x + v_offset[i][1]; y := y + v_offset[i][2]; fi; s := sprintf("%s \\draw(%.3f,%.3f) node{$v_{%a}$};\n", s,x,y,i); od; s := cat(s, " \\end{tikzpicture}\n", "\\end{center}" ); save_tikz("HX",s); return s; end: ###################################################################### #@ make_a_H_dependence_plot_tikz make_a_H_dependence_plot_tikz := proc(a) local s,k,d,phi,m,p,r,theta; s := cat( " \\begin{tikzpicture}[scale=3]\n", " \\draw (0,0) (1,0) arc(0:90:1);\n", " \\draw[blue] (0,1) -- (0,0) -- (1,0);\n", " \\draw[green] (0,0) -- ( 0.707, 0.707);\n" ); for k in [0,7,8] do s := cat(s,xi_curve_tikz(evalf(subs(a_H=a,c_H_p[k])),c_colour[k])); od: p := evalf(subs(a_H = a,c_H_p[3])); r := evalf(subs(a_H = a,c_H_r[3])); theta := round(evalf(arctan(1/r) * 180 / Pi)); s := sprintf("%s \\draw[magenta](%.3f,0) (%.3f,0) arc(180:%d:%.3f);\n", s,p,p-r,180-theta,r); s := sprintf("%s \\draw[magenta](0,%.3f) (0,%.3f) arc(270:%d:%.3f);\n", s,p,p-r,270+theta,r); if false then d := evalf(sqrt(1/p^2-1)); phi := evalf(arccos(d*p)); m := round(evalf(phi * 180/Pi)); s := sprintf("%s \\draw[magenta](%.3f,0) (%.3f,0) arc(180:%d:%.3f);\n", s,evalf(1/p),evalf(1/p-d),180-m,d); s := sprintf("%s \\draw[magenta](0,%.3f) (0,%.3f) arc(270:%d:%.3f);\n", s,evalf(1/p),evalf(1/p-d),270+m,d); fi; s := cat(s, " \\end{tikzpicture}\n" ); save_tikz("a_H_dependence",s); return s; end: ###################################################################### #@ make_F1_plot_tikz make_F1_plot_tikz := proc() local theta,r0,r1,m0,m1,arcs,vertices,a,s; global F1_arcs,F1_theta,F1_tikz; r0 := period_a; r1 := (2*period^2-1)/(2*period); vertices := [ [13 ,"west"], [ 1 ,"south west"], [12.2,"south"], [12 ,"south"], [ 1.1,"south east"], [13.3,"east"], [13.1,"east"], [ 1.2,"north east"], [12.3,"north"], [12.1,"north"], [ 1.3,"north west"], [13.2,"west"] ]; arcs := evalf(subs(a_H = a_H0,F1_arcs)); s := cat( "\\begin{center}\n", " \\begin{tikzpicture}[scale=5]\n" ); for a in arcs do m0 := round(evalf(a[4]*180/Pi)); m1 := round(evalf(a[5]*180/Pi)); s := sprintf("%s \\draw[%a](%.3f,%.3f) +(%d:%.3f) arc(%d:%d:%.3f);\n", s,a[6],a[1],a[2],m0,a[3],m0,m1,a[3]); od; for a in vertices do s := sprintf("%s \\fill(%.3f,%.3f) circle(0.01);\n", s,Re(v_H1[a[1]]),Im(v_H1[a[1]])); od: for a in vertices do s := sprintf("%s \\draw(%.3f,%.3f) node[anchor=%s]{$v_{%a}$};\n", s,Re(v_H1[a[1]]),Im(v_H1[a[1]]),a[2],a[1]); od: s := cat(s, " \\end{tikzpicture}\n", "\\end{center}" ); F1_tikz := s; save_tikz("F1",s); return s; end: ###################################################################### #@ beta_offset_latex beta_offset_latex := proc() local i,j,k,s,t,A; s := "\\begin{align*}\n"; for i from 0 to 13 do j := act_V[L](i); t := sprintf(" \\lm(v_{%2d}) &= ",i); A := v_beta_offset[L,i]; for k in A do t := sprintf("%s\\bt_%d(",t,k); od: t := sprintf("%sv_{%2d}",t,j); for k in A do t := cat(t,")"); od: t := cat(t," &\n"); s := cat(s,t); j := act_V[M](i); t := sprintf(" \\mu(v_{%2d}) &= ",i); A := v_beta_offset[M,i]; for k in A do t := sprintf("%s\\bt_%d(",t,k); od: t := sprintf("%sv_{%2d}",t,j); for k in A do t := cat(t,")"); od: t := cat(t," &\n"); s := cat(s,t); j := act_V[N](i); t := sprintf(" \\nu(v_{%2d}) &= ",i); A := v_beta_offset[N,i]; for k in A do t := sprintf("%s\\bt_%d(",t,k); od: t := sprintf("%sv_{%2d}",t,j); for k in A do t := cat(t,")"); od: t := cat(t," \\\\\n"); s := cat(s,t); od; s := cat(s,"\\end{align*}\n"); return(s); end: ###################################################################### #@ make_c_H_plots make_c_H_plots := proc() local i; global pics,c_H_plot; c_H_plot[1] := line([-1,-1] /~ sqrt(2.),[ 1, 1] /~ sqrt(2.),colour=c_colour[1]); c_H_plot[2] := line([-1, 1] /~ sqrt(2.),[ 1,-1] /~ sqrt(2.),colour=c_colour[2]); c_H_plot[5] := line([-1, 0],[ 1, 0],colour=c_colour[5]); c_H_plot[6] := line([ 0,-1],[ 0, 1],colour=c_colour[6]); for i in [0,3,4,7,8] do c_H_plot[i] := xi_circle(c_H_p0[i],colour = c_colour[i]); od: for i from 0 to 8 do pics[sprintf("c_H[%d]",i)] := display(c_H_plot[i],axes=none,scaling=constrained); od: pics["curves_H"] := display( circle(), seq(c_H_plot[i],i=0..8), scaling=constrained,axes=none ); save_plots(seq(sprintf("c_H[%d]",i),i=0..8),"curves_H"); save_jpgs( seq(sprintf("c_H[%d]",i),i=0..8),"curves_H"); pics["curves_H"]; end: save_c_H_plots := proc() save_plots(seq(sprintf("c_H[%d]",i),i=0..8),"curves_H"); end: load_c_H_plots := proc() load_plots(seq(sprintf("c_H[%d]",i),i=0..8),"curves_H"); end: ###################################################################### #@ make_hyperbolic_domains make_hyperbolic_domains := proc() local c_H_list,m,m1,s0,s1,t0,t1,u0,u1,v0,v1; global F1_H_boundary,F1_H_boundaryo,F4_H_boundary,F8_H_boundary,F16_H_boundary; c_H_list := proc(k,a,b) [seq(evalf(c_H0[k](a + 0.05*i*(b-a))),i=0..20)]; end: F16_H_boundary := [ op(c_H_list(5,0,Pi)), op(c_H_list(3,0,Pi/2)), op(c_H_list(0,Pi/2,Pi/4)), op(c_H_list(1,Pi,0)) ]: F8_H_boundary := [ op(c_H_list(5,0,Pi)), op(c_H_list(3,0,Pi/2)), op(c_H_list(0,Pi/2,0)), op(c_H_list(4,-Pi/2,0)), op(c_H_list(6,Pi,0)) ]: F4_H_boundary := [ op(c_H_list(5,0,Pi)), op(c_H_list(3,0,Pi)), op(c_H_list(7,Pi,0)), op(c_H_list(8,Pi,0)), op(c_H_list(4,-Pi,0)), op(c_H_list(6,Pi,0)) ]: F1_H_boundary := [ op(c_H_list(3,-Pi,Pi)), op(c_H_list(7,Pi,0)), op(c_H_list(8,0,Pi)) ]: F1_H_boundary := [op(F1_H_boundary),op(map(z ->I*z,F1_H_boundary))]: F1_H_boundary := [op(F1_H_boundary),op(map(z -> -z,F1_H_boundary))]: NULL: end: ###################################################################### #@ make_H_plots make_H_plots := proc() local k,s; global pics; pics["F1_H_boundary"] := display( seq(cplot(I^k*c_H0[3](s),s=-Pi..Pi,colour = c_colour[3]),k=0..3), seq(cplot(I^k*c_H0[7](s),s= Pi.. 0,colour = c_colour[7]),k=0..3), seq(cplot(I^k*c_H0[8](s),s= 0..Pi,colour = c_colour[8]),k=0..3), axes=none ): pics["F1_H_boundary_b"] := display( map(u -> plot([u[1]+u[3]*cos(t),u[2]+u[3]*sin(t),t=u[4]..u[5]],colour=u[6]), evalf(subs(a_H = a_H0,F1_arcs))), axes = none ); pics["F4_H_boundary"] := display( cplot(c_H0[5](s),s=0..Pi, colour = c_colour[5]), cplot(c_H0[3](s),s=0..Pi, colour = c_colour[3]), cplot(c_H0[7](s),s=Pi..0, colour = c_colour[7]), cplot(c_H0[8](s),s=Pi..0, colour = c_colour[8]), cplot(c_H0[4](s),s=-Pi..0,colour = c_colour[4]), cplot(c_H0[6](s),s=Pi..0, colour = c_colour[6]), axes=none,scaling=constrained ): pics["F8_H_boundary"] := display( cplot(c_H0[5](s),s=0..Pi, colour = c_colour[5]), cplot(c_H0[3](s),s=0..Pi, colour = c_colour[3]), cplot(c_H0[0](s),s=Pi/4..Pi/2,colour = c_colour[0]), cplot(c_H0[7](s),s=0..Pi, colour = c_colour[7]), cplot(c_H0[1](s),s=0..Pi, colour = c_colour[1]), axes=none,scaling=constrained ); pics["F16_H_boundary"] := display( cplot(c_H0[0](s),s=Pi/4..Pi/2,colour = c_colour[0]), cplot(c_H0[1](s),s=0..Pi/2, colour = c_colour[1]), cplot(c_H0[3](s),s=0..Pi/2, colour = c_colour[3]), cplot(c_H0[5](s),s=0..Pi, colour = c_colour[5]), axes=none,scaling=constrained ): save_plot("F1_H_boundary"); save_plot("F1_H_boundary_b"); save_plot("F4_H_boundary"); save_plot("F8_H_boundary"); save_plot("F16_H_boundary"); save_jpg("F1_H_boundary"); save_jpg("F1_H_boundary_b"); save_jpg("F4_H_boundary"); save_jpg("F8_H_boundary"); save_jpg("F16_H_boundary"); NULL; end: ###################################################################### #@ make_radius_plot_tikz make_radius_plot_tikz := proc() global tikz_pics; local s; s := cat( "\\begin{center}\n", " \\begin{tikzpicture}[scale=3]\n", " \\draw[black,->] (-0.05,0) -- (2.05,0);\n", " \\draw[black,->] (0,-0.05) -- (0,1.05);\n", " \\draw[black] (2,-0.05) -- (2,0);\n", " \\draw[black] (-0.05,1) -- (0,1);\n", " \\draw ( 0.00,-0.05) node[anchor=north] {$0$};\n", " \\draw ( 2.00,-0.05) node[anchor=north] {$1$};\n", " \\draw (-0.05, 0.00) node[anchor=east ] {$0$};\n", " \\draw (-0.05, 1.00) node[anchor=east ] {$1$};\n", " \\draw ( 2.05, 0.00) node[anchor=west ] {$b$};\n", " \\draw ( 0.00, 1.05) node[anchor=south] {$|m|$};\n", tikz_plot(unapply([2*a_H,abs(min_centre_a)],a_H),0.0..0.1,30,red), tikz_plot(unapply([2*a_H,abs(min_centre_a)],a_H),0.1..0.9,30,red), tikz_plot(unapply([2*a_H,abs(min_centre_a)],a_H),0.9..1.0,30,red), " \\end{tikzpicture}\n", "\\end{center}\n" ): tikz_pics["radius_plot"] := s; save_tikz("radius_plot",s); return s; end: ###################################################################### #@ make_H_to_P_graph_tikz make_H_to_P_graph_tikz := proc() local s; if not(assigned(HP_table)) then load_data["HP_table"](); fi; s := HP_table["spline_plot_tikz"]; save_tikz("H_to_P_graph",s); return s; end: ###################################################################### #@ make_square_diffeo_H_plot make_square_diffeo_H_plot := proc() global pics; local NN,PP,i,j,c,t0; NN := 20; PP := NULL; for i from 0 to NN do for j from 0 to NN do t0[i,j] := C_to_R2(square_diffeo_H0_inverse([i/NN,j/NN])); od: od: for i from 0 to NN do for j from 0 to NN-1 do if i = 0 then c := c_colour[0]; elif i = NN then c := c_colour[5]; else c := grey; fi; PP := PP,line(t0[i,j],t0[i,j+1],colour=c); od: od: for i from 0 to NN-1 do for j from 0 to NN do if j = 0 then c := c_colour[1]; elif j = NN then c := c_colour[3]; else c := grey; fi; PP := PP,line(t0[i,j],t0[i+1,j],colour=c); od: od: pics["square_diffeo_H"] := display(PP,scaling=constrained,axes=none); save_plot("square_diffeo_H"); save_jpg( "square_diffeo_H"); pics["square_diffeo_H"]; end: ###################################################################### #@ make_tile_plot make_tile_plot := proc() local P,z0,k,T,e0,e1,m1; global pics; P := circle(1): z0 := v_H0[3]/2: for k in [0,1,3,5] do e0 := evalf(subs(a_H=a_H0,c_H_ends[k])): for T in [entries(tile)] do e1 := map2(act_Pi_tilde0,op(T),e0); if abs(e1[1] + e1[2]) > 10^(-20) then m1 := ends_to_centre(op(e1)); P := P,xi_circle(m1,colour = c_colour[k]); else P := P,line(C_to_R2(e1[1]),C_to_R2(e1[2]),colour=c_colour[k]); fi: od: od: for T in [entries(tile)] do P := P,cpoint(act_Pi_tilde(op(T),z0)): od: P := display(P,axes=none,scaling=constrained); pics["tiles"] := P; save_plot("tiles"); save_jpg( "tiles"); P; end: ###################################################################### #@ make_H_to_P_poles_plot make_H_to_P_poles_plot := proc() global pics; pics["H_to_P_poles"] := display( circle(1), circle(0.468,colour=grey), cplot(subs(a_H=a_H0,c_HS[0](t)),t=F4_curve_limits[0],colour=c_colour[0]), cplot(subs(a_H=a_H0,c_HS[1](t)),t=F4_curve_limits[1],colour=c_colour[1]), cplot( subs(a_H=a_H0,c_HS[3](t)),t=F4_curve_limits[3],colour=c_colour[3]), cplot(-subs(a_H=a_H0,c_HS[3](t)),t=F4_curve_limits[3],colour=c_colour[3]), cplot( subs(a_H=a_H0,c_HS[5](t)),t=F4_curve_limits[5],colour=c_colour[5]), cplot(-subs(a_H=a_H0,c_HS[5](t)),t=F4_curve_limits[5],colour=c_colour[5]), cplot( conjugate(subs(a_H=a_H0,c_HS[5](t))),t=F4_curve_limits[5],colour=c_colour[5]), cplot(-conjugate(subs(a_H=a_H0,c_HS[5](t))),t=F4_curve_limits[5],colour=c_colour[5]), map(cpoint,evalf(subs(a_H=a_H0,small_p1_poles)),colour=red), scaling=constrained,axes=none ): save_plot("H_to_P_poles"); save_jpg( "H_to_P_poles"); pics["H_to_P_poles"]; end: