% -- translate-file=il2-pl --
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\setcounter{chapter}{4}

\chapter{Tworzenie grafiki matematycznej}
\label{chap:graphics}

\begin{intro}
  Większość ludzi używa {\LaTeX}a do składania tekstów. Ponieważ jednak
  podejście strukturalno-logiczne do tworzenia dokumentów jest tak
  wygodne, {\LaTeX} oferuje pewną -- fakt, że obarczoną ograniczeniami
  -- możliwość generowania grafiki z~opisów tekstowych w~pliku
  źródłowym. Co więcej, powstało sporo rozszerzeń {\LaTeX}a
  przełamujących wspomniane ograniczenia. W~tym rozdziale dowiesz się
  o~kilku z~tych rozszerzeń.
\end{intro}

\section{Przegląd}

Otoczenie \ei{picture} pozwala programować rysunki bezpośrednio
w~{\LaTeX}u. Szczegółowy jego opis można znaleźć w~\manual. Metoda ta ma
jednak ograniczenia, które wynikają z~tego, że zarówno nachylenia odcinków,
jak i~średnice okręgów można wybierać jedynie spośród niewielkiej
liczby wartości. Z~drugiej strony w~wersji \LaTeXe{} można w~otoczeniu
\ei{picture} używać polecenia \ci{qbezier}, gdzie ,,\texttt{q}'' oznacza
drugiego stopnia \przypang{quadratic}. Wiele często używanych krzywych,
jak: okręgi, elipsy albo krzywe łańcuchowe można -- niekiedy z~odrobiną
wysiłku matematycznego -- zadowalająco przybliżać krzywymi
B\'eziera\footnote{W~ciekawym artykule \cite{jacko-bezier}
  B.L.~Jackowski\index{Jackowski Bogusław} zwraca uwagę, że krzywe
  B\'eziera są krzywymi giętymi stopnia trzeciego, nie zaś -- jak
  sugeruje nazewnictwo {\LaTeX}owe -- stopnia drugiego.}. Jeśli na
dodatek do generowania {\LaTeX}owych bloków \ci{qbezier} użyje się języka
programowania, na przykład Javy, to otoczenie \ei{picture} ujawni
całkiem pokaźną moc.

Chociaż programowanie rysunków w~{\LaTeX}u wiąże się z~ograniczeniami
i~jest niekiedy nużące, to jednak są powody, by z~tej możliwości
korzystać. Dokumenty wytworzone w~ten sposób są ,,małe'' -- w~sensie
liczby bajtów zajmowanych przez wynikowe pliki \acro{PDF} 
lub \acro{DVI} -- a~na
dodatek nie trzeba do nich wczytywać dodatkowych plików graficznych.

Pakiety takie jak: \pai{epic} i \pai{eepic} (opisane na przykład
w~\companion) bądź \pai{pstricks} pomagają pokonywać ograniczenia
krępujące oryginalne otoczenie \ei{picture} i~znacznie rozszerzają
graficzną moc {\LaTeX}a.

O~ile pierwsze dwa z~tych pakietów jedynie rozszerzają otoczenie
\ei{picture}, to pakiet \pai{pstricks} zawiera własne otoczenie
rysujące -- \ei{pspicture}. Moc pakietu  \pai{pstricks} bierze się
z~tego, że istotnie wykorzystuje on możliwości {\PSi}u.

% zmiany głównie z powodu niewypełnienia strony:-)
Na dodatek napisano wiele pakietów realizujących konkretne cele. Jednym
z~nich jest \texorpdfstring{\Xy}{Xy}-pic, opisany na końcu tego
rozdziału. Znaczną liczbę tych pakietów opisano w~\graphicscompanion{}
(nie należy mylić z~\companion).

Spośród narzędzi graficznych związanych z~{\LaTeX}em największe chyba
możliwości posiada {\MP}, 
autorstwa Johna D.~Hobby\index{Hobby John D.}, będący wariantem
programu {\MF}, 
którego autorem jest z~kolei Donald E.~Knuth\index{Knuth Donald E.}. 
{\MP} jest wyposażony w~solidny
i~matematycznie wyrafinowany język programowania {\MF}a.
Inaczej jednak niż {\MF}, który generuje mapy bitowe,
{\MP} generuje pliki {\PSi}owe, które można importować
do~{\LaTeX}a. Za wprowadzenie może posłużyć \hobby, 
a~za podręcznik -- \cite{ursoswald}. Dostępne jest także
wprowadzenie do programu {\MP} w~języku 
polskim~\cite{metapost}\footnote{%
Nie ma co ukrywać, że posługiwanie się {\MP}em wymaga posiadania
przynajmniej minimum umiejętności programistycznych. Dla użytkowników
którzy nie programują przydatny może być program MetaGraf, który
jest okienkową nakładką do programu {\MP}, 
por.~\urlMetaGraf.}.

%Obszerną dyskusję podejścia {\LaTeX}a i~\TeX{}a do grafiki (oraz fontów)
Obszerne omówienie zagadnień związanych 
z~wykorzystaniem grafiki (oraz fontów)
w~{\LaTeX}u i~\TeX{}u można znaleźć w~\hoenig.

\section{Otoczenie \texttt{picture}}

\secby{Urs Oswald}{osurs@bluewin.ch}

\subsection{Podstawowe polecenia}

Otoczenie \ei{picture}\footnote{Otoczenie
  \ei{picture} działa w~standardowym {\LaTeXe}; nie trzeba ładować
  żadnych dodatkowych pakietów.} można tworzyć poleceniem:
\begin{command}
\cmd{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\cmd{end}\verb|{picture}|
\end{command}
\noindent lub
\begin{command}
\cmd{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\cmd{end}\verb|{picture}|
\end{command}
Liczby $x,\,y,\,x_0,\,y_0$ odnoszą się do wielkości \ci{unitlength},
którą można zmieniać w~dowolnym momencie
(jednak nie wewnątrz otoczenia \ei{picture}) poleceniem takim jak:
\begin{command}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{command}
Wartością domyślną \ci{unitlength} jest \texttt{1pt}. Pierwsza para,
$(x,y)$, to wymiary rezerwowanego wewnątrz dokumentu prostokątnego
obszaru na rysunek. Opcjonalna druga para, $(x_0,y_0)$, to współrzędne
przypisane dolnemu lewemu narożnikowi zarezerwowanego prostokąta.

Większość poleceń rysujących ma jedną z~dwóch postaci:
\begin{command}
\ci{put}\verb|(|$x,y$\verb|){|\emph{object}\verb|}|
\end{command}
\noindent lub
\begin{command}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{object}\verb|}|\end{command}
\noindent Wyjątkiem są krzywe B\'eziera, gdyż rysuje się je poleceniem:
\begin{command}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{command}

\subsection{Odcinki}

\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
  \put(0,0){\line(0,1){1}}
  \put(0,0){\line(1,0){1}}  
  \put(0,0){\line(1,1){1}}  
  \put(0,0){\line(1,2){.5}}
  \put(0,0){\line(1,3){.3333}}
  \put(0,0){\line(1,4){.25}}  
  \put(0,0){\line(1,5){.2}}
  \put(0,0){\line(1,6){.1667}}
  \put(0,0){\line(2,1){1}}
  \put(0,0){\line(2,3){.6667}}
  \put(0,0){\line(2,5){.4}}
  \put(0,0){\line(3,1){1}}  
  \put(0,0){\line(3,2){1}}
  \put(0,0){\line(3,4){.75}}
  \put(0,0){\line(3,5){.6}}
  \put(0,0){\line(4,1){1}}
  \put(0,0){\line(4,3){1}}  
  \put(0,0){\line(4,5){.8}}
  \put(0,0){\line(5,1){1}}
  \put(0,0){\line(5,2){1}}
  \put(0,0){\line(5,3){1}}
  \put(0,0){\line(5,4){1}}
  \put(0,0){\line(5,6){.8333}}
  \put(0,0){\line(6,1){1}}
  \put(0,0){\line(6,5){1}}
\end{picture}
\end{example}

Do rysowania odcinków służy polecenie:
\begin{command}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{command}
\noindent
Ma ono ma dwa argumenty: wektor kierunku i~długość.

Jako składników wektora kierunku można użyć jedynie liczb całkowitych:
\[
  -6,\,-5,\,\ldots,\,5,\,6,
\]
Muszą one na dodatek być liczbami względnie pierwszymi (jedynym ich wspólnym
dzielnikiem może być 1). Powyższy rysunek ilustruje wszystkie możliwe
wartości nachylenia w~pierwszej ćwiartce płaszczyzny. Długość jest 
podawana w~jednostkach \ci{unitlength}. Argument długości oznacza
współrzędną pionową w~wypadku odcinka pionowego, zaś współrzędną
poziomą we wszystkich pozostałych przypadkach.

\subsection{Strzałki}

\begin{example}
\setlength{\unitlength}{0.75mm}
\begin{picture}(60,40)
  \put(30,20){\vector(1,0){30}}
  \put(30,20){\vector(4,1){20}}
  \put(30,20){\vector(3,1){25}}
  \put(30,20){\vector(2,1){30}}
  \put(30,20){\vector(1,2){10}}
  \thicklines
  \put(30,20){\vector(-4,1){30}}
  \put(30,20){\vector(-1,4){5}}
  \thinlines
  \put(30,20){\vector(-1,-1){5}}
  \put(30,20){\vector(-1,-4){5}}
\end{picture}
\end{example}

Strzałki rysuje się poleceniem:
\begin{command}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{command}
\noindent W~wypadku strzałek na składniki wektora kierunku nałożone są
jeszcze większe ograniczenia niż dla odcinków, bo jedynymi
dopuszczalnymi liczbami całkowitymi są:
\[
  -4,\,-3,\,\ldots,\,3,\,4.
\]
Wartości składników i~tu muszą być liczbami względnie pierwszymi 
(jedynym wspólnym dzielnikiem może być 1). Zauważ efekt działania polecenia
\ci{thicklines} na dwie strzałki skierowane w~stronę lewego górnego 
narożnika oraz \ci{thinlines} na strzałki w~stronę narożnika prawego górnego.

\subsection{Okręgi}

\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60, 40)
  \put(20,30){\circle{1}}
  \put(20,30){\circle{2}}
  \put(20,30){\circle{4}}
  \put(20,30){\circle{8}}
  \put(20,30){\circle{16}}
  \put(20,30){\circle{32}}
  
  \put(40,30){\circle{1}}
  \put(40,30){\circle{2}}
  \put(40,30){\circle{3}}
  \put(40,30){\circle{4}}
  \put(40,30){\circle{5}}
  \put(40,30){\circle{6}}
  \put(40,30){\circle{7}}
  \put(40,30){\circle{8}}
  \put(40,30){\circle{9}}
  \put(40,30){\circle{10}}
  \put(40,30){\circle{11}}
  \put(40,30){\circle{12}}
  \put(40,30){\circle{13}}
  \put(40,30){\circle{14}}
  
  \put(15,10){\circle*{1}}
  \put(20,10){\circle*{2}}
  \put(25,10){\circle*{3}}
  \put(30,10){\circle*{4}}
  \put(35,10){\circle*{5}}
\end{picture}
\end{example}

Polecenie:
\begin{command}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{diam}\verb|}}|
\end{command}
\noindent rysuje okrąg o~środku $(x,y)$ i~średnicy (nie promieniu)
równym \emph{diam}. Otoczenie \ei{picture} dopuszcza średnice co najwyżej
rzędu 14\,mm, na dodatek nie wszystkie długości średnic są
dozwolone. Polecenie \ci{circle*} generuje koła (wypełnione okręgi).

Podobnie jak w~wypadku odcinków, można się uciec do dodatkowych pakietów,
takich jak \pai{eepic} bądź \pai{pstricks}. Obszerny opis tych
pakietów można znaleźć w~\graphicscompanion.

Otoczenie \ei{picture} oferuje jeszcze jedną opcję. Jeśli nie boisz się
wykonania niezbędnych obliczeń (być może nawet za pomocą programu), to
okręgi oraz elipsy możesz złatać z~krzywych B\'eziera drugiego stopnia.
Przykłady oraz źródłowe pliki w~Javie można znaleźć w~\graphicsinlatex.

\subsection{Tekst i~wzory}

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,5)
  \thicklines
  \put(1,0.5){\line(2,1){3}}
  \put(4,2){\line(-2,1){2}}
  \put(2,3){\line(-2,-5){1}}
  \put(0.65,0.3){$A$}
  \put(4.05,1.9){$B$}
  \put(1.65,2.95){$C$}
  \put(3.1,2.5){$a$}
  \put(1.3,1.7){$b$}
  \put(2.5,1.05){$c$}
  \put(0.3,4){$F=
    \sqrt{s(s-a)(s-b)(s-c)}$}  
  \put(3.5,0.4){$\displaystyle
    s:=\frac{a+b+c}{2}$}
\end{picture}
\end{example}
Jak widać w~powyższym przykładzie, tekst oraz wzory można łatwo
wprowadzać do otoczenia \ei{picture} poleceniem \ci{put}.

\subsection{Polecenia \texorpdfstring{\cmd{multiput} 
        i \cmd{linethickness}}{multiput i linethickness}}

\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){26}%
    {\line(0,1){20}}
  \multiput(0,0)(0,1){21}%
    {\line(1,0){25}}
  \linethickness{0.15mm}    
  \multiput(0,0)(5,0){6}%
    {\line(0,1){20}}
  \multiput(0,0)(0,5){5}%
    {\line(1,0){25}}
  \linethickness{0.3mm}    
  \multiput(5,0)(10,0){2}%
    {\line(0,1){20}}
  \multiput(0,5)(0,10){2}%
    {\line(1,0){25}}
\end{picture}
\end{example}
Polecenie:
\begin{command}
  \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{object}\verb|}|
\end{command}
\noindent ma cztery argumenty: punkt początkowy, wektor przesunięcia
z~jednego obiektu do kolejnego, liczbę obiektów oraz rysowany obiekt.
Instrukcja \ci{linethickness} odnosi się do odcinków poziomych oraz
pionowych, jednakże nie do odcinków ukośnych ani nie do okręgów.
Stosuje się ona jednak również do krzywych B\'eziera drugiego stopnia.

\subsection{Owale}

\begingroup
\typeout{*** Coś jest trochę za duże w tym Przykładzie ***}
\begin{example}
\setlength{\unitlength}{0.75cm}
\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(2,3){\oval(3,1.8)} 
  \thinlines
  \put(3,2){\oval(3,1.8)} 
  \thicklines
  \put(2,1){\oval(3,1.8)[tl]} 
  \put(4,1){\oval(3,1.8)[b]} 
  \put(4,3){\oval(3,1.8)[r]} 
  \put(3,1.5){\oval(1.8,0.4)}     
\end{picture}
\end{example}
\endgroup
 %%
Polecenie:
 %%
\begin{command}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}|
\end{command}
\noindent jak też:
\begin{command}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{pozycja}\verb|]}|
\end{command}
\noindent generuje owal o~środku  $(x,y)$, szerokości
$w$ i~wysokości $h$. Opcjonalne argumenty \emph{pozycji\/}:
\texttt{b}, \texttt{t}, \texttt{l} i~\texttt{r} oznaczają odpowiednio:
,,top'' (góra), ,,bottom'' (dół), ,,left'' (lewo) i~,,right'' (prawo).
Jak pokazuje przykład, można także używać ich kombinacji. 

Grubością linii można sterować na dwa sposoby, z~jednej strony poleceniem:
\begin{command}
\ci{linethickness}\verb|{|\emph{length}\verb|}|
\end{command}
\noindent
z~drugiej -- za pomocą \ci{thinlines} i~\ci{thicklines}. O~ile pierwszy
ze sposobów odnosi się jedynie do linii poziomych oraz pionowych,
a~także do krzywych B\'eziera drugiego stopnia, o~tyle \ci{thinlines}
i~\ci{thicklines} stosują się do odcinków ukośnych, jak też do okręgów
i~owali.

\subsection{Wielokrotne użycie pudełek z~rysunkami}

\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}
\savebox{\foldera}
  (40,32)[bl]{% definition 
  \multiput(0,0)(0,28){2}
    {\line(1,0){40}}
  \multiput(0,0)(40,0){2}
    {\line(0,1){28}}
  \put(1,28){\oval(2,2)[tl]}
  \put(1,29){\line(1,0){5}}
  \put(9,29){\oval(6,6)[tl]}
  \put(9,32){\line(1,0){8}}
  \put(17,29){\oval(6,6)[tr]}
  \put(20,29){\line(1,0){19}}
  \put(39,28){\oval(2,2)[tr]}  
}
\newsavebox{\folderb}
\savebox{\folderb}
  (40,32)[l]{%         definition 
  \put(0,14){\line(1,0){8}}
  \put(8,0){\usebox{\foldera}}
}
\put(34,26){\line(0,1){102}} 
\put(14,128){\usebox{\foldera}}
\multiput(34,86)(0,-37){3}
  {\usebox{\folderb}} 
\end{picture}
\end{example}
Pudełko rysunku można \emph{zadeklarować} instrukcją:
\begin{command}
  \ci{newsavebox}\verb|{|\emph{nazwa}\verb|}|
\end{command}
\noindent następnie \emph{zachować} poleceniem:
\begin{command}
  \ci{savebox}\verb|{|\emph{nazwa}\verb|}(|\emph{szerokość,wysokość}\verb|)[|\emph{pozycja}\verb|]{|\emph{treść}\verb|}|
\end{command}
\noindent i~ostatecznie dowolnie często \emph{rysować}, wywołując:
\begin{command}
  \ci{put}\verb|(|$x,y$\verb|)|\ci{usebox}\verb|{|\emph{nazwa}\verb|}|
\end{command}

Opcjonalny parametr  \emph{pozycja\/} definiuje ,,punkt zaczepienia''
zachowywanego pudełka (savebox). W~przykładzie nadano mu wartość
 \texttt{bl}, co oznacza umieszczenie punktu zaczepienia w~dolnym lewym
narożniku pudełka. Pozycje można też oznaczać literami
\texttt{t} (góra) i~\texttt{r} (prawo).

Argument \emph{nazwa\/} odnosi się do {\LaTeX}owego magazynu poleceń
i~dlatego ma naturę instrukcji (co w~powyższym przykładzie objawia się
choćby użyciem znaków '\verb+\+'). Rysunki przechowywane w~pudełkach
można zagnieżdżać. W~powyższym przykładzie wewnątrz definicji
\ci{folderb} użyto \ci{foldera}.

Trzeba było użyć polecenia \ci{oval}, ponieważ instrukcja \ci{line} 
nie działa, gdy długość odcinka wynosi mniej niż około 3\,mm.

\subsection{Krzywe  B\'eziera drugiego stopnia}

\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}
 %%
\noindent
Jak widać w~przykładzie, podzielenie okręgu na cztery krzywe B\'eziera
drugiego stopnia nie daje zadowalającego efektu; lepsze przybliżenie
dałoby osiem. Przykład ponownie ilustruje wpływ instrukcji
\ci{linethickness} na linie poziome i~pionowe oraz poleceń
\ci{thinlines} i~\ci{thicklines} na odcinki pochyłe. Pokazuje on
również, że oba te rodzaje poleceń oddziałują na krzywe B\'eziera i~że
kolejne użycie któregokolwiek z~nich przesłania poprzednie.

Niech symbole $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ oznaczają punkty
końcowe, zaś $m_1,\,m_2$ -- odpowiednie nachylenia krzywej B\'eziera
drugiego stopnia. Pośredni punkt kontrolny $S=(x,\,y)$ jest zatem
opisany równaniami:
\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}, \smallskip\\
      y & = & y_i+m_i(x-x_i)\qquad (i=1,\,2).
    \end{array}
  \right.
\end{equation}
\noindent W~\graphicsinlatex\ można znaleźć program w~Javie, który
generuje odpowiednią linię polecenia \ci{qbezier}.

\subsection{Krzywe łańcuchowe}

\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}
\noindent 
Każdą z~symetrycznych połówek wykresu cosinusa hiperbolicznego
 $y=\cosh x -1$ przybliżono na~rysunku krzywą 
B\'eziera. Prawa połówka krzywej kończy się w~punkcie \((2,\,2.7622)\),
w~którym nachylenie ma wartość \(m=3.6269\). Używając ponownie równania
(\ref{zwischenpunkt}), możemy wyliczyć pośrednie punkty kontrolne.
Okazuje się, że są to: $(1.2384,\,0)$ i~$(-1.2384,\,0)$.
Krzyżykami została zaznaczona ,,prawdziwa'' krzywa. Błąd jest
ledwie zauważalny, bo wynosi mniej niż jeden procent.

Ten przykład ilustruje też użycie opcjonalnego argumentu otoczenia
\verb|\begin{picture}|. Rysunek zdefiniowano w~terminach
  wygodnych współrzędnych ,,matematycznych", podczas gdy poleceniem:
\begin{command} 
  \cmd{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)|
\end{command}
\noindent jego lewemu dolnemu narożnikowi (oznaczonemu czarnym 
kółeczkiem) przypisano współrzędne $(-2.5,-0.25)$. 

\subsection{Prędkość w~Szczególnej Teorii Względności}

\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}
Punkty kontrolne dwóch krzywych  B\'eziera wyliczono ze wzorów
(\ref{zwischenpunkt}). Gałąź dodatnia jest określona wartościami
$P_1=(0,\,0),\,m_1=1$ oraz $P_2=(2,\,\tanh 2),\,m_2=1/\cosh^2 2$.
I~znowu rysunek wyrażono w~wygodnych matematycznie 
współrzędnych, a~lewemu dolnemu narożnikowi przypisano współrzędne
$(-3,-2)$ (czarne kółeczko).

\section{\texorpdfstring{\Xy}{Xy}-pic}
\secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt}
Pakiet \Xy-pic służy do rysowania grafów. Aby uzyskać dostęp do jego
funkcji, umieszczamy w~preambule dokumentu wiersz:
 %%
\begin{command}
\verb|\usepackage[|\emph{opcje}\verb|]{xy}|
\end{command}
 %%
\noindent
Parametr \emph{opcje} jest listą funkcji pakietu \Xy-pic, które mają
zostać załadowane. Opcje te przydają się między innymi do szukania błędów
w~pakiecie. Zaleca się przekazywać opcję \popti{all}, 
nakazującą {\LaTeX}owi załadować wszystkie polecenia pakietu.
\looseness-3

Graf rysuje się w~\Xy-pic na płótnie o~strukturze macierzy,
a~każdy element grafu jest umieszczony w~komórce tej macierzy:
\begin{example}
\begin{displaymath}
\xymatrix{A & B \\ 
C & D }
\end{displaymath}
\end{example}
\noindent
Polecenia \ci{xymatrix} można użyć jedynie w~trybie matematycznym. Powyżej
zadano dwa wiersze i~dwie kolumny. Aby przekształcić tę macierz
w~graf, posługujemy się dodającym strzałki 
poleceniem \ci{ar}\footnote{Pakiety \Xy-pic oraz \pai{polski} 
są w~konflikcie, bo oba
definiują polecenie~\ci{ar}. 
Jeżeli polecenie \ci{ar} ma działać tak, jak 
zdefiniowano to w~pakiecie \Xy-pic, to trzeba \pai{xy}
dołączyć po pakiecie \pai{polski}.
Oczywiście nie ma wtedy dostępu do polecenia \ci{ar}
z~pakietu \pai{polski}.}:
\begin{example}
\begin{displaymath}
\xymatrix{ A \ar[r] & B \ar[d] \\
           D \ar[u] & C \ar[l] }
\end{displaymath}
\end{example}
\noindent
Polecenie \ci{ar} umieszczamy w~komórce, w~której strzałka ma
się zaczynać. Argument oznacza kierunek strzałki (\texttt{u} -- góra, 
\texttt{d} -- dół, \texttt{r} -- prawo i~\texttt{l} -- lewo):
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[r] & B \\
  D                       & C }
\end{displaymath}
\end{example}
Aby uzyskać przekątne, używamy po prostu więcej niż jednego kierunku.
Powtarzając kierunek, wydłużamy w~istocie strzałkę:
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[drr] & & \\
  B                      & C & D }
\end{displaymath}
\end{example}
Uzupełniając strzałki o~etykiety, możemy uzyskać jeszcze ciekawsze grafy.
Używamy do tego zwyczajnych operatorów indeksów górnych i~dolnych:
\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}
Jak widać, operatorów tych używa się tak samo jak w~trybie matematycznym.
Jedyną różnicą jest to, że indeks górny oznacza \emph{nad}, 
zaś dolny -- \emph{pod} strzałką. Istnieje jeszcze trzeci 
operator -- pionowej kreski  \verb+|+. Umieszcza
on tekst \emph{na} strzałce:
\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}
Aby narysować strzałkę z~dziurką w~środku, możemy użyć
polecenia  \verb!\ar[...]|\hole!.

W~niektórych sytuacjach trzeba używać różnych typów strzałek. 
Można je w~tym celu oznaczać różnymi etykietami bądź 
nadawać im różny wygląd:

\begingroup
%% zmniejsz odstęp między wierszami do 1,5pc (domyśnie 2,0pc)
%% w macierzy \xymatrix, bo nie wchodzi na stronę:
\xymatrixrowsep{1.5pc}
%\shorthandoff{"} %% było poniżej \begin{example}, ale po co ? --tp --
\begin{example}
\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}
\end{example}
%\shorthandon{"} %% było nad \end{example} ale nie wiadomo po co? --tp--
\endgroup

Zauważ różnicę między następującymi dwoma grafami:

\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}
 %%
 %%\texttt{\meaning\ar}
\noindent Symbole między ukośnikami określają tu sposób rysowania krzywych.

Pakiet \Xy-pic oferuje wiele metod wpływania na sposób rysowania
krzywych. Więcej na ten temat można przeczytać 
w~dokumentacji pakietu~\cite{xy-pic}.

\endinput

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "lshort2e"
%%% coding: latin-2
%%% case-fold-search: nil
%%% LocalWords: Jackowski
%%% ispell-local-dictionary: "polish"
%%% End:
