%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \setcounter{chapter}{4} \newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}} \newcommand{\hobby}{\emph{A User's Manual for MetaPost}~\cite{metapost}} \newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}} \newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe{}}~\cite{ursoswald}} \chapter{Priprava matematičnih slik} \label{chap:graphics} \begin{intro} Večina uporabnikov z \LaTeX{}om ureja besedila. Čeprav \LaTeX{}ov pristop k urejanju besedil poudarja strukturo pred vsebino, \LaTeX{} vseeno ponuja nekaj zelo omejenih možnosti za prikaz grafičnih vsebin, ki jih opišemo z ukazi v vhodni datoteki. Obstaja veliko razširitev \LaTeX{}a, ki premostijo te omejitve in omogočajo še lažjo pripravo slik. Nekaj jih bomo predstavili v tem poglavju. \end{intro} \section{Kratki pregled} V okolju \ei{picture} lahko slike programiramo direktno v \LaTeX{}u. Podroben opis lahko poiščete v \manual. Na eni strani smo v tem okolju zelo omejeni z nekaterimi pogoji, tako so npr.~nakloni daljic in polmeri krogov omejeni na majhen izbor možnih vrednosti. Na drugi strani pa imamo v okolju \ei{picture} v \LaTeXe\ na voljo ukaz \ci{qbezier} za B\'ezierove krivulje, kjer ">\texttt{q}"< pomeni "zasidrana"<. V zgornjem primeru je to mesto nastavljeno na \texttt{bl} kar postavlja mesto priveza v gornji levi kot škatle. Ostale možno vrednosti za ta parameter so še \texttt{t} (zgoraj) in \texttt{r} (desno). Argument \emph{ime} se nanaša na \LaTeX{}ov pomnilnik in ima naravo ukaza (zato v zgornjem primeru imena vsebujejo tudi poševnice). Škatle s slikami lahko vlagamo v druge škatle, v zgornjem primeru je tako npr.~\ci{foldera} uporabljen v definiciji \ci{folderb}. V definiciji smo morali uporabiti ukaz \ci{oval}, saj ukaz \ci{line} ne podpira daljic, kjer je dolžina segmenta manjša od 3\,mm. \subsection{Kvadratne B\'ezierove krivulje} \begin{example} \setlength{\unitlength}{0.8cm} \begin{picture}(6,4) \linethickness{0.075mm} \multiput(0,0)(1,0){7} {\line(0,1){4}} \multiput(0,0)(0,1){5} {\line(1,0){6}} \thicklines \put(0.5,0.5){\line(1,5){0.5}} \put(1,3){\line(4,1){2}} \qbezier(0.5,0.5)(1,3)(3,3.5) \thinlines \put(2.5,2){\line(2,-1){3}} \put(5.5,0.5){\line(-1,5){0.5}} \linethickness{1mm} \qbezier(2.5,2)(5.5,0.5)(5,3) \thinlines \qbezier(4,2)(4,3)(3,3) \qbezier(3,3)(2,3)(2,2) \qbezier(2,2)(2,1)(3,1) \qbezier(3,1)(4,1)(4,2) \end{picture} \end{example} Kot prikazuje ta primer, ni dovolj dobro, če krožnico razdelimo le na 4 kvadratne B\'ezierove krivulje. Potrebujemo jih najmanj 8. Na sliki vidimo tudi, kakšne je vpliv ukazov \ci{linethickness} na vodoravne in navpične premice in kako \ci{thinlines} in \ci{thicklines} vplivata na poševne daljice. Vidimo lahko tudi, da oba razreda ukazov delujeta na kvadratne B\'ezierove krivulje, kjer vsak nov ukaz povozi prejšnjega. Naj $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ označujeta končni točki, in naj bosta $m_1$ in $m_2$ naklona kvadratne B\'ezierove krivulje v teh točkah. Vmesna kontrolna točka $S=(x,\,y)$ je potem podana z enačbami \begin{equation} \label{zwischenpunkt} \left\{ \begin{array}{rcl} x & = & \displaystyle \frac{m_2 x_2-m_1x_1-(y_2-y_1)}{m_2-m_1}, \\ y & = & y_i+m_i(x-x_i)\qquad (i=1,\,2). \end{array} \right. \end{equation} \noindent Poglejte \graphicsinlatex\ za program v Javi, ki generira vrstice s potrebnimi ukazi \ci{qbezier}. \subsection{Verižnica} \begin{example} \setlength{\unitlength}{1cm} \begin{picture}(4.3,3.6)(-2.5,-0.25) \put(-2,0){\vector(1,0){4.4}} \put(2.45,-.05){$x$} \put(0,0){\vector(0,1){3.2}} \put(0,3.35){\makebox(0,0){$y$}} \qbezier(0.0,0.0)(1.2384,0.0) (2.0,2.7622) \qbezier(0.0,0.0)(-1.2384,0.0) (-2.0,2.7622) \linethickness{.075mm} \multiput(-2,0)(1,0){5} {\line(0,1){3}} \multiput(-2,0)(0,1){4} {\line(1,0){4}} \linethickness{.2mm} \put( .3,.12763){\line(1,0){.4}} \put(.5,-.07237){\line(0,1){.4}} \put(-.7,.12763){\line(1,0){.4}} \put(-.5,-.07237){\line(0,1){.4}} \put(.8,.54308){\line(1,0){.4}} \put(1,.34308){\line(0,1){.4}} \put(-1.2,.54308){\line(1,0){.4}} \put(-1,.34308){\line(0,1){.4}} \put(1.3,1.35241){\line(1,0){.4}} \put(1.5,1.15241){\line(0,1){.4}} \put(-1.7,1.35241){\line(1,0){.4}} \put(-1.5,1.15241){\line(0,1){.4}} \put(-2.5,-0.25){\circle*{0.2}} \end{picture} \end{example} Na tej sliki je vsaka simetrična polovica grafa verižnice $y=\cosh x -1$ aproksimirana s kvadratno B\'ezierovo krivuljo. Desna polovica krivulje se konča v točki \((2,\,2.7622)\), kjer ima odvod vrednost \(m=3.6269\). S pomočjo enačb (\ref{zwischenpunkt}) lahko izračunamo vmesne kontrolne točke. Za njiju se izkaže, da sta $(1.2384,\,0)$ in $(-1.2384,\,0)$. Križi označujejo točke \emph{prave} verižnice. Vidimo, da razlika skoraj ni opazna in je povsod pod enim procentom. Ta primer kaže, kako lahko uporabljamo neobvezni argument v ukazu \\ \verb|\begin{picture}|. Slika je definirana v smiselnih matematičnih koordinatah, medtem ko ukaz \begin{lscommand} \ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)| \end{lscommand} \noindent za njen spodnji levi kot (označen z črnim pobarvanim diskom) privzame koordinate $(-2.5,-0.25)$. \subsection{Hitrost v posebni teoriji relativnosti} \begin{example} \setlength{\unitlength}{0.8cm} \begin{picture}(6,4)(-3,-2) \put(-2.5,0){\vector(1,0){5}} \put(2.7,-0.1){$\chi$} \put(0,-1.5){\vector(0,1){3}} \multiput(-2.5,1)(0.4,0){13} {\line(1,0){0.2}} \multiput(-2.5,-1)(0.4,0){13} {\line(1,0){0.2}} \put(0.2,1.4) {$\beta=v/c=\tanh\chi$} \qbezier(0,0)(0.8853,0.8853) (2,0.9640) \qbezier(0,0)(-0.8853,-0.8853) (-2,-0.9640) \put(-3,-2){\circle*{0.2}} \end{picture} \end{example} Kontrolne točke dveh B\'ezierovih krivulj so bile izračunane s pomočjo formul (\ref{zwischenpunkt}). Pozitivna veja je določena s $P_1=(0,\,0),\,m_1=1$ in $P_2=(2,\,\tanh 2),\,m_2=1/\cosh^2 2$. Slika je definirana z matematično najustreznejšimi koordinatami, potem pa levemu spodnjemu kotu določimo koordinate $(-3,-2)$ (črn krog). \section{\texorpdfstring{\Xy}{Xy}-pic} \secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt} \pai{xy} je poseben paket za risanje diagramov. Za njegovo uporabo moramo v preambulo dokumenta dodati: \begin{lscommand} \verb|\usepackage[|\emph{opcije}\verb|]{xy}| \end{lscommand} Pri tem v \emph{opcije} navedemo seznam funkcij iz \Xy-pic ki jih želimo naložiti. Te opcije pridejo prav kadar je potrebno iskati napake v paketu, sicer pa je najbolj priporočljivo na mestu \emph{opcije} podati \verb!all!, s čimer povzročimo, da \LaTeX{} naloži vse ukaze iz paketa \Xy-pic. \Xy-pic diagrami se rišejo na podlago, ki je urejena v stilu matrike, pri čemer se vsak element diagrama zapiše na mesto elementa matrike: \begin{example} \begin{displaymath} \xymatrix{A & B \\ C & D } \end{displaymath} \end{example} Ukaz \ci{xymatrix} moramo uporabiti v matematičnem načinu. V tem primeru smo podali dve vrstici in dva stolpca. Iz te matrike dobimo diagram, ko dodamo usmerjene povezave z ukazom \ci{ar}. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r] & B \ar[d] \\ D \ar[u] & C \ar[l] } \end{displaymath} \end{example} Ukaz za puščico je potrebno postaviti na mesto tistega elementa v matriki, od koder puščica izvira. Argumenti ukaza \texttt{ar} so smeri, kamor naj kaže puščica (\texttt{u} (gor), \texttt{d} (dol), \texttt{r} (desno) in \texttt{l} (levo). \begin{example} \begin{displaymath} \xymatrix{ A \ar[d] \ar[dr] \ar[r] & B \\ D & C } \end{displaymath} \end{example} Diagonalne puščice dobimo tako, da uporabimo več kot eno črko za opis smeri. Opis smeri lahko tudi sestavimo iz več črk in tako dobimo daljše diagonale. \begin{example} \begin{displaymath} \xymatrix{ A \ar[d] \ar[dr] \ar[drr] & & \\ B & C & D } \end{displaymath} \end{example} Še bolj zanimive diagrame dobimo, če puščice opremimo z napisi. To dosežemo z uporabo običajnih operatorjev za indekse in potence.. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r]^f \ar[d]_g & B \ar[d]^{g'} \\ D \ar[r]_{f'} & C } \end{displaymath} \end{example} Kot vidite, operatorje za napise na puščicah uporabljamo kot v matematičnem načinu.Edina razlika je, da sedaj potenca (zgornji indeks) pomeni ">na vrhu puščice,"< indeks pa pomeni ">pod puščico."< Obstaja še tretji operator, pokončna črta: \verb+|+ Ta operator razporedi tekst \emph{na} puščico. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r]|f \ar[d]|g & B \ar[d]|{g'} \\ D \ar[r]|{f'} & C } \end{displaymath} \end{example} Če potrebujemo puščico z luknjo, uporabimo \verb!\ar[...]|\hole!. V nekaterih primerih je potrebno ločiti med različnimi tipi puščic. To lahko naredimo tako, da jih opremimo z napisi ali pa spremenimo njihov videz: \begin{example} \shorthandoff{"} \begin{displaymath} \xymatrix{ \bullet\ar@{->}[rr] && \bullet\\ \bullet\ar@{.<}[rr] && \bullet\\ \bullet\ar@{~)}[rr] && \bullet\\ \bullet\ar@{=(}[rr] && \bullet\\ \bullet\ar@{~/}[rr] && \bullet\\ \bullet\ar@{^{(}->}[rr] && \bullet\\ \bullet\ar@2{->}[rr] && \bullet\\ \bullet\ar@3{->}[rr] && \bullet\\ \bullet\ar@{=+}[rr] && \bullet } \end{displaymath} \shorthandon{"} \end{example} Bodite pozorni na razlike med naslednjima dvema diagramoma: \begin{example} \begin{displaymath} \xymatrix{ \bullet \ar[r] \ar@{.>}[r] & \bullet } \end{displaymath} \end{example} \begin{example} \begin{displaymath} \xymatrix{ \bullet \ar@/^/[r] \ar@/_/@{.>}[r] & \bullet } \end{displaymath} \end{example} Znamenje med poševnicama pove, kako naj se nariše krivulja. \Xy-pic ponuja mnogo možnosti, ki vplivajo na risanje krivulj. Za več informacij poglejte v dokumentacijo, ki je priložena paketu. % \begin{example} % \begin{lscommand} % \ci{dum} % \end{lscommand} % \end{example}