File:ArcCipMapT.jpg

Complex map of function ArcCip

C++ generator of curves
For technical reasons, the generator of curves is divided to few file

plofu.cin
The code below should be stored as plofu.cin. It determines thickness and color of drawing of the contour of levels of constant real part of the function and those for the imaginary part; and also values of these levels. The separation from other funcitons allows to plot several maps in the same style. However, for different pictures, the different styles may be required; so, these commands are not stores at plofu.cin.

fprintf(o,"1 setlinejoin 1 setlinecap\n"); p=1.8;q=.7; for(m=-11;m<11;m++)for(n=2;n<10;n+=2)conto(o,f,w,v,X,Y,M,N,(m+.1*n),-q, q); fprintf(o,".01 W 0 .6 0 RGB S\n"); for(m=0;m<10;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N,-(m+.1*n),-q, q); fprintf(o,".01 W .9 0 0 RGB S\n"); for(m=0;m<10;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N, (m+.1*n),-q, q); fprintf(o,".01 W 0 0 .9 RGB S\n"); for(m=1;m<11;m++) conto(o,f,w,v,X,Y,M,N, (0.-m),-p,p); fprintf(o,".03 W .9 0 0 RGB S\n"); for(m=1;m<11;m++) conto(o,f,w,v,X,Y,M,N, (0.+m),-p,p); fprintf(o,".03 W 0 0 .9 RGB S\n"); conto(o,f,w,v,X,Y,M,N, (0. ),-p,p); fprintf(o,".03 W .6 0 .6 RGB S\n"); for(m=-9;m<10;m++) conto(o,g,w,v,X,Y,M,N, (0.+m),-p,p); fprintf(o,".03 W 0 0 0 RGB S\n");

Evaluation of AcrCip
The routines for evaluation of ArcCip aslo are stored separately. This makes easy the include to various codes. The text below should be stored as acip.cin. For the best performance in a general case, the complex double function ACip5 should be called. other functions are good only for the special case. Below, z_type means complex double (although, the definition as just complex also may provide the workable program).

z_type Cip(z_type z) {return cos(z)/z;} z_type Cipp(z_type z) {return (-sin(z) - cos(z)/z)/z ;} z_type ACip0(z_type z) {z_type t=1./(z*z); return (1.       +t*(-1./2. +t*(13./24.       +t*(-541./720. +t*(9509./8064.       +t*(-7231801./3628800. +t*(1695106117./479001600.       +t*(-567547087381./87178291200.)))))))        )/z ; }

z_type ACip1(z_type z){int n; z_type c=ACip0(z); c+=.1*(z-Cip(c))/Cipp(c) ; c+=.2*(z-Cip(c))/Cipp(c) ; c+=.3*(z-Cip(c))/Cipp(c) ; c+=.4*(z-Cip(c))/Cipp(c) ; c+=.5*(z-Cip(c))/Cipp(c) ; c+=.7*(z-Cip(c))/Cipp(c) ; DO(n,8) c+=(z-Cip(c))/Cipp(c) ; return c;       } // ACip0 does not know about the singulatiry.

z_type acos(z_type z){ if(Im(z)<0){if(Re(z)>=0){return I*log( z + sqrt(z*z-1.) );} else{return I*log( z - sqrt(z*z-1.) );}} if(Re(z)>=0){return -I*log( z + sqrt(z*z-1.) );} else {return -I*log( z - sqrt(z*z-1.) );} }

z_type ACipb(z_type z){ z_type t = 0.33650841691839534 + z ; z_type u=sqrt(t); return 2.798386045783887 +u*(-2.437906425896532 +u*(0.7079542331649882 +u*(-.5009330133042798 +u*(0.5714459932734446 )))); }

z_type ACip3(z_type z){int n; z_type c=ACipb(z); c+=.2*(z-Cip(c))/Cipp(c) ; c+=.5*(z-Cip(c))/Cipp(c) ; DO(n,8) c+=(z-Cip(c))/Cipp(c) ; //       DO(n,8) c=acos(c*z) ; //       DO(n,8) c=cos(c)/z ; return c;       }

z_type ACip4(z_type z){int n; z_type z1=z_type(0,1.62134794610324); z_type t=z-z1; z_type c;       c=-z1+2.*sqrt(I*t); //    c=z1+t*(-2.+t*z_type(0,4.) ); c+=.2*(z-Cip(c))/Cipp(c) ; c+=.5*(z-Cip(c))/Cipp(c) ; DO(n,8) c+=.9*(z-Cip(c))/Cipp(c) ; return c;       }

z_type ACip5(z_type z){int n;       if(Re(z)>0 && abs(z)>1.2) return ACip1(z); if(Re(z)>-2 && fabs(Im(z))<1.) return ACip3(z); if(Im(z)>0) return ACip4(z); return conj(ACip4(conj(z))); }

Main generator
// In addition to the files arccip.cin and plofu.cin mentioned above, files ado.cin and conto.cin should be stored in the working directory for the compilation of the main code below:

using namespace std; typedef complex z_type;
 * 1) include 
 * 2) include 
 * 3) include 
 * 4) define DB double
 * 5) define DO(x,y) for(x=0;x<y;x++)
 * 1) include
 * 1) define Re(x) x.real
 * 2) define Im(x) x.imag
 * 3) define I z_type(0.,1.)
 * 4) include "conto.cin"


 * 1) include "acip.cin"

main{ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d; int M=401,M1=M+1; int N=401,N1=N+1; DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array. char v[M1*N1]; // v is working array FILE *o;o=fopen("acipmap.eps","w");ado(o,82,82); fprintf(o,"41 41 translate\n 10 10 scale\n"); //DO(m,M1) X[m]=-4.+.02*(m-.5); DO(n,200)Y[n]=-4.+.02*n; Y[200]=-.002; Y[201]= .002; for(n=202;n-99. && p<99.        &&     q>-99. && q<99         ) {g[m*N1+n]=p; f[m*N1+n]=q; }                       }} //#include "plodi.cin" DB x1=-0.33650841691839534; DB y1= 1.55; M(-4.02,0)L(x1,0) M(0,-4.02)L(0,-y1) M(0,y1)L(0,4.02) fprintf(o,"0 setlinecap .028 W .9 1 .9 RGB S\n"); DO(m,37){x=x1-.1*m; M(x,0) L(x-.05,0)} DO(n,25){y=-y1-.1*n; M(0,y) L(0,y-.05)} DO(n,25){y=y1+.1*n; M(0,y) L(0,y+.05)} fprintf(o,".032 W 0 0 0 RGB S\n"); fprintf(o,"showpage\n%c%cTrailer",'%','%'); fclose(o); system("epstopdf acipmap.eps"); system(   "open acipmap.pdf"); getchar; system("killall Preview");//for mac }
 * 1) include "plofu.cin"

Latex generator of lables
% \documentclass[12pt]{article} % \paperheight 838px % \paperwidth 844px % \textwidth 1294px % \textheight 1200px % \topmargin -80px % \oddsidemargin -80px % \usepackage{graphics} % \usepackage{rotating} % \newcommand \sx {\scalebox} % \newcommand \rot {\begin{rotate}} % \newcommand \ero {\end{rotate}} % \newcommand \ing {\includegraphics} % \newcommand \rmi {\mathrm{i}} % \begin{document} % \newcommand \zoomax { % \put(16,820){\sx{4.4}{$y$}} % \put(16,630){\sx{4}{$2$}} % \put(16,430){\sx{4}{$0$}} % \put(-4, 230){\sx{4}{$-\!2$}} % \put(220, 5){\sx{4}{$-\!2$}} % \put(443, 5){\sx{4}{$0$}} % \put(643, 5){\sx{4}{$2$}} % \put(831,6){\sx{4}{$x$}} % } % \parindent 0pt % %\sx{8}{\begin{picture}(86,86) \put(0,0){\ing{b271t0}} % \begin{picture}(816,816) % \put(40,30){\sx{10}{\ing{acipmap}}} % \zoomax % \put(130,806){\sx{4}{\rot{-42}$u\!=\!1$\ero}} % \put(90,750){\sx{4}{\rot{-33}$u\!=\!1.2$\ero}} % \put(70,680){\sx{4}{\rot{-26}$u\!=\!1.4$\ero}} % \put(60,484){\sx{4}{\rot{2}$u\!=\!2$\ero}} % \put(60,431){\sx{4}{\bf cut}} % \put(460,690){\sx{4}{\rot{90}\bf cut \ero}} % \put(460,120){\sx{4}{\rot{90}\bf cut \ero}} % \put(60,377){\sx{4}{\rot{-3}$u\!=\!2$\ero}} % \put(130,90){\sx{4}{\rot{42}$u\!=\!1$\ero}} % % \put(310,744){\sx{4}{\rot{22}$v\!=\!3$\ero}} % \put(370,588){\sx{4}{\rot{34}$v\!=\!2$\ero}} % \put(290,160){\sx{4}{\rot{-22}$v\!=\!-3$\ero}} % % \put(720,708){\sx{4}{\rot{-21}$u\!=\!0.2$\ero}} % \put(750,431){\sx{4}{\rot{00}$v\!=\!0$\ero}} % \put(726,148){\sx{4}{\rot{21}$u\!=\!0.2$\ero}} % % \put(680,550){\sx{3.8}{\rot{68}$v\!=\!0.2$\ero}} % \put(644,330){\sx{3.7}{\rot{-68}$v\!=\!-0.2$\ero}} % % \end{picture} % \end{document} % %