% !TEX TS-program = LuaLaTeX
% !TEX encoding = UTF-8 Unicode 
% !TEX root = ../../mal-core.tex
\def\malTikZ{Ti\textit{k}Z}
\def\balicek#1{\textsf{#1}}
\begin{asydef}
  pen blackIV=black*0.40+white*0.60;
  pen blackII=black*0.20+white*0.80;
  pen PPblueblack=blue*0.50+black*0.50;
  pen PPoliveblack=heavygreen*0.50+black*0.50;
  pen PPblueblackI =PPblueblack*0.60+white*0.40;
  pen blueII=blue*0.20+white*0.80;
  pen blueV=blue*0.50+white*0.50;
\end{asydef}
\addto\captionsslovak{%\renewcommand{\figurename}{Fig.}
  \renewcommand{\figurename}{Obr.}%
  }
%\def\barevnost{ne}

\gdef\mujnazevCS{Asymptote a \LaTeX}
\gdef\mujnazevEN{Asymptote and \LaTeX}
\gdef\mujnazevPR{\mujnazevCS}
\gdef\mujnazevDR{\mujnazevEN}
\gdef\mujauthor{Rudolf Blaško}

\bonushyper

\nazev{\mujnazevCS}

\nazev{\mujnazevEN}

\author{\mujauthor}

\Adresa{Katedra mat. metód a operačnej analýzy, Fakulta riadenia a~informatiky, Žilinská univerzita, Univerzitná 8215/1, 010\,26 Žilina, Slovensko}

\Email{beerb@frcatel.fri.uniza.sk}

\Abstrakt{\TeX, resp. \LaTeX{} patria medzi najlepšie DTP programy na svete a~v~prípade odborných textov 
(matematických, fyzikálnych, chemických ap.) existuje len veľmi málo programov (aj to iba komerčných), ktoré by im mohli konkurovať.
Kancelárske programy Office nemôžu \TeX-u konkurovať ani v~prípade hladkej sadzby. 
Aj nakresliť graf matematickej funkcie nie je problém.
Existuje mnoho programov, ktoré dokážu grafy pomerne pekne vykresliť. 
Problém nastáva s~exportom a~následným použitím v~inom dokumente.
Problém býva hlavne so sprievodným textom, t.~j. použitým písmom. 
\LaTeX{} má k~dispozícií už niekoľko rokov veľmi silný prostriedok\,--\,balíček \malTikZ.
Skúsený pisateľ dokáže pomocou balíčka \malTikZ{} nakresliť prakticky všetko od jednoduchých obrázkov, 
cez grafy funkcií až po zložité schémy. 
Iná možnosť pri písaní dokumentov v~\TeX-u, resp. \LaTeX-u je použitie programu \texttt{Asymptote}, 
ktorý je súčasťou distribúcie \TeX{}Live.
Nevýhodou je nutnosť viacnásobného prekladu dokumentu (vrátane \texttt{Asymptote}).
Nepopierateľná pridaná hodnota (pri použití \malTikZ-u aj \texttt{Asymptote}) 
ostáva v~možnosti použitia všetkých dostupných prostriedkov \LaTeX-u. 
V~spojení s balíčkom \balicek{animate} môžeme grafy a~obrázky vytvorené pomocou \malTikZ-u a~\texttt{Asymptote} jednoducho animovať.}
\smallskip
\KlucovaSlova{\TeX, \LaTeX, balíček \malTikZ, \texttt{Asymptote}, balíček \balicek{animate}, reálna funkcia, 3D~funkcia}

\Abstract{\TeX, respectively, \LaTeX{} belong to the best desktop publishing programs in the world and what is concerning the scientific texts 
(mathematical, physical, chemical, etc.), there are very few programs (even commercial ones) that could compete with them.
The ``Office type'' programs cannot compete with \TeX{} even with smooth text typeset. 
Even drawing a~graph of a~mathematical function is not a~problem.
There are many programs that can render graphs quite nicely. 
The problem arises with the export and subsequent use in another document. 
The problem is especially with the accompanying text, i.e. font used.
\LaTeX{} contains a~very strong tool --~the \malTikZ{} package~-- for several years now. 
The experienced writer can draw almost everything from simple pictures, function graphs to complex diagrams using the 
\malTikZ{} package.
Another option when writing documents in \TeX, respectively, \LaTeX{} is the \texttt{Asymptote} program included with \TeX{}Live.
The disadvantage is the necessity of multiple translations of the document (if it includes \texttt{Asymptote}).
The undeniable added value (using both \malTikZ{} and \texttt{Asymptote}) remains in the use of all available \LaTeX{} tools. 
In conjunction with the \balicek{animate} package, you can easily animate graphs and images.}
\smallskip
\KeyWords{\TeX, \LaTeX, package \malTikZ, \texttt{Asymptote}, package \balicek{animate}, real function, 3D~function}


\addcontentsline{toc}{section}{Úvod}%
\section*{Úvod}

\TeX{} \cite{texbook}, resp. \LaTeX{} patria medzi najlepšie DTP programy na svete a~v~prípade odborných textov 
(matematických, fyzikálnych, chemických, technických ap.), kde sa vyžadujú špeciálne symboly alebo dokonca zložitejšie vzťahy, 
existuje len veľmi málo programov (aj to iba komerčných), ktoré by im mohli konkurovať.
V~uvedených odborných kruhoch sú samozrejme aj najčastejšie používané. Ale to sa žiaľ, netýka Slovenska a~Česka. 
Aj keď sú \TeX{} a~\LaTeX{} zadarmo (Open Source), mnoho autorov uprednostní komerčný Microsoft Office, v~lepšom prípade Libra Office.
Tieto programy sú výborné hlavne pre sekretárky, prípadne pre hladkú sadzbu.
Pre vedecké a~odborné texty (matematické, technické, chemické ap.) sú nevhodné a~nepraktické.
Ak chce niekto písať matematické vzorce a~rovnice pomocou týchto kancelárskych programov, 
dokáže to, ale samozrejme s~neporovnateľne väčším úsilím 
a~neporovnateľne nižšou kvalitou.

Ak píšeme odborný text, mnohokrát potrebujeme svoje výsledky ilustrovať grafmi nejakých matematických funkcií.
Sú to nielen funkcie jednorozmerné (ich grafy sú~2D), ale aj viacrozmerné s~grafmi zobrazenými v~3D priestore.
Nakresliť graf takejto matematickej funkcie nie je problém.
Existuje mnoho programov (napr. komerčné programy 
\href{https://www.wolfram.com/mathematica/}{Wolfram Mathematica}, 
\href{https://www.maplesoft.com/}{Maple}, 
\href{https://www.mathworks.com/products/matlab.html}{Matlab},
Open Source 
\href{http://maxima.sourceforge.net/}{Maxima}, 
resp. 
\href{https://sourceforge.net/projects/wxmaxima/}{wxMaxima}, 
prípadne on-line  
\href{https://www.wolframalpha.com}{WolframAlpha}), 
ktoré dokážu grafy pomerne pekne vykresliť. 
Problém nastáva s~exportom a~následným použitím v~inom dokumente.
Statické grafy sa exportujú pomerne jednoducho, oveľa ťažšie je exportovať animované grafy.
V~prípade 2D~grafov môžeme v~uvedenom programe vytvoriť animovaný súbor vo formáte \verb|.gif| a~následne 
ho importovať do \TeX-ovského dokumentu.
Oveľa výhodnejšie je v~tomto prípade vytvoriť pre každý relevantný záber jeden grafický súbor (najlepšie vo formáte
\verb|.pdf|, \verb|.png| alebo \verb|.jpg|)  a~tie následne spojiť do jediného animovaného obrázka pomocou balíčka \balicek{animate}.
Takto vytvorené obrázky môžeme pomocou jednoduchého menu ovládať (meniť rýchlosť prehrávania, prehrávať od zadu do predu, pozastaviť
prehrávanie ap.).
Balíček \balicek{animate} veľmi dobre spolupracuje s~obrázkami vytvorenými pomocou balíčka~\malTikZ{} a~taktiež 
s~obrázkami vytvorenými v~programe \verb|Asymptote|.
Navyše aj 3D~objekty vytvorené pomocou \verb|Asymptote| môžeme tiež animovať (meniť veľkosť, otáčať do rôznych smerov ap.).



\section{Asymptote}

Program \verb|Asymptote: The Vector Graphics Language| vyvinuli Andy Hammerlindl, John C.~Bowman (University of Alberta) a~Tom Prince \cite{hammerlindl,blasko}.
\verb|Asymptote| je Open Source prostriedok, ktorý je k dispozícii na základe licencie GNU Lesser General Public License (LGPL). 
\verb|Asymptote| funguje samozrejme nielen pod Linux-om, ale aj pod Mac~OS a~Microsoft Windows.
Je vhodný na kreslenie grafov matematických funkcií a~to dvojrozmerných a~aj trojrozmerných.

Na domovskej stránke %stránke 
\href{https://asymptote.sourceforge.io/}{\url{asymptote.sourceforge.io}}
náj\-de\-me mnoho užitočných informácií (dokumentácia, zdrojové a~inštalačné súbory, galérie 2D a~3D príkladov, index, tutoriál, forúm, 
odkazy na iné stránky,~\dots).

Môžeme si z~tejto stránky stiahnuť inštalačné súbory a~\verb|Asymptote| nainštalovať na svoj počítač.
\verb|Asymptote| výstižne charakterizuje hneď prvý odstavec na tejto stránke:
\uv{\texttt{Asymptote} je výkonný popisný jazyk vektorovej grafiky, ktorý poskytuje prirodzené prostredie pre kreslenie 
technických obrázkov a~schém. Popisky a~rovnice sú vysádzané pomocou \TeX-u, resp. \mbox{\LaTeX-u}, de facto štandardu pre sadzbu matematiky.}
Hlavnou výhodou \verb|Asymptote| oproti iným grafickým programom je, že je navyše aj programovacím jazykom.
Je inšpirovaný \MP-om, syntax jazyka je odvodená zo~syntaxe \verb|C++|.
Grafické príkazy sú implementované v~samotnom jazyku \verb|Asymptote|, čo umožňuje ich prispôsobenie konkrétnym situáciám.
Spomeňme ešte niektoré zaujímavé vlastnosti \verb|Asymptote|, viď \url{https://asymptote.sourceforge.io/right.html}:

\smallskip

$\bullet$ Generovanie vysoko kvalitnej vektorovej grafiky s~možnosťami výstupu do formátov 
PostScript (\verb|.ps|, resp. \verb|.eps|), \verb|.pdf|, \verb|.svg|, \verb|WebGL| a \verb|PRC|.

\smallskip

$\bullet$  Možnosť vkladania 3D~vektorovej grafiky \verb|WebGL| (Web Graphics Library pre JavaScript)
do súborov \verb|.html|.
                                                             
\smallskip                                                   
                                                             
$\bullet$  Možnosť vkladania 3D~vektorovej grafiky \verb|PRC| (Product Representation Compact) do súborov \verb|.pdf|.

\smallskip

Ak máme nainštalovaný \TeX{} a~neplánujeme \verb|Asymptote| samostatne používať, 
potom ho nemusíme samostatne inštalovať, pretože je štandartnou súčasťou inštalácie \TeX-u
a~veľmi dobre spolupracuje s~\LaTeX-om pomocou balíčka \balicek{asymptote}.
Pre nás je interesantné, že 3D~obrázky vytvorené pomocou \verb|Asymptote| 
a~exportované do súborov \verb|.pdf|, môžeme rôzne otáčať, zmenšovať~ap.
Dvojrozmerné obrázky dokážeme animovať pomocou balíčka \balicek{animate}.
Balíčkom \balicek{animate} sa zaoberal P.\,Stříž na OSSConf 2010 v~príspevku 
\uv{Jak jsem se skamarádil s~\LaTeX{}ovým balíčkem \texttt{animate}} \cite{striz}, pričom autor
obrázky vytváral na úrovni \MP-u.



%.............................................. slovenský abstrakt
\section{Asymptote a \TeX}

Najväčšia výhoda \verb|Asymptote| je už spomínaná spolupráca a~prepojenie s~\TeX-ovým, resp. \LaTeX-ovým dokumentom.
Po vložení príkazu 

\begin{verbatim}
\usepackage[inline]{asymptote}
\end{verbatim}

\noindent
do preambuly \LaTeX-ového zdrojového dokumentu môžeme scripty pre program \verb|Asymptote| písať priamo do textu 
do prostredia \verb|asy|:

\begin{verbatim}
\begin{asy}
  zdrojový text pre Asymptote
\end{asy}
\end{verbatim}

\noindent
pričom za príkazom \verb|\begin{asy}| nesmie byť prázdny riadok
a~%príkaz 
\verb|\end{asy}| musí byť na samostatnom riadku a~musí byť na riadku jediný 
(ani \TeX-ovská poznámka pomocou \verb|%| nemôže byť za ním).
\LaTeX{} dokument sa prekladá na tri krát, preto je vhodné si vytvoriť script na takýto preklad.
Napríklad, ak sa náš zdrojový súbor nazýva \verb|subor.tex|, 
potom preklad by mal prebiehať nasledovne:

\begin{verbatim}
$ lualatex subor.tex
$ asy subor-*.asy
$ lualatex subor.tex
\end{verbatim}

Prvý %spomínaný 
krok, preklad pomocou \verb|lualatex|-u, vytvorí v~domovskom
adresári 
súboru \texttt{subor.tex}
súbory \verb|subor-1.asy|, \verb|subor-2.asy|,~\dots{} 
(ku každému prostrediu \verb|asy| jeden súbor)
a~súbor \verb|subor.pre|.

Druhý krok, preklad pomocou \verb|Asymptote|, vytvorí v~uvedenom adresári 
súbory \verb|subor-1.tex|, \verb|subor-2.tex|,~\dots, 
\verb|subor-1.pre|, \verb|subor-2.pre|,~\dots, 
a~pomocné súbory \verb|_subor-1.pdf|, \verb|_subor-2.pdf|,~\dots,
a tiež
\verb|subor-1_0.pdf|, \verb|subor-2_0.pdf|,~\dots{}
Pri vytváraní 3D grafiky sa vygenerujú aj iné súbory, napr. 
\verb|subor-?+0.prc|, \verb|subor-?+0_0.pdf|, \verb|subor-?_0.pbsdat| a \verb|subor.out|.

Po druhom kroku je súbor \verb|subor.pdf| nefunkčný, preto musíme urobiť ešte jeden preklad pomocou \verb|lualatex|-u.
Ak sa pri písaní dokumentu údaje v~prostrediach potrebných pre \verb|Asymptote| nezmenia, preklad pomocou \verb|asy| nemusíme robiť
a~postačí jeden preklad pomocou \verb|lualatex|-u.

Externý súbor \verb|asysubor.asy| so zdrojovým kódom \verb|Asymptote| môžeme do \LaTeX-ovského dokumentu vložiť pomocou príkazu

\begin{verbatim}
\asyinclude[<voľby>]{asysubor.asy}
\end{verbatim}

%Druhá zaujímavá % mal
Iná
možnosť ako používať \LaTeX{} s~implementovanými zdrojovými kódmi \verb|Asymptote|
je použitie utility \verb|latexmk| zo stránky \url{http://mirror.ctan.org/support/latexmk/}.
Dostupné aj v 
\href{https://www.tug.org/texlive/}{\TeX Live}.

Nastavenia potrebné pre \verb|Asymptote|, ktoré používame vo viacerých prostrediach \verb|asy|, nemusíme písať samostatne
v~každom z~nich.
Môžeme ich definovať na začiatku (môžeme aj v~preambule) v~prostredí \verb|asydef|, napr.

\begin{verbatim}
\begin{asydef}
  texpreamble("\usepackage[math]{iwona}");
  real cc=1.5; // hodnota cc > 0
  import graph;
\end{asydef}
\end{verbatim}

Príkaz \verb|texpreamble("\usepackage[math]{iwona}");| zariadi, že v~celom dokumente, vrátane prostredí
\verb|asy| nastaví sanserifový font \verb|iwona| (viď \url{https://tug.org/FontCatalogue/iwona/}).
Ak tento príkaz použijeme iba v~nejakom konkrétnom prostredí \verb|asy|, tieto fonty sa nastavia 
v~celom dokumente a~iba v~tomto prostredí  \verb|asy| a~v~ostatných prostrediach \verb|asy| sa nenastavia.
Ak dáme do preambuly príkaz \verb|\usepackage[math]{iwona}| fonty sa nastavia iba v~celom dokumente, ale nie v~prostrediach  \verb|asy|.

Príkaz \verb|import graph;| načíta modul \verb|graph| na kreslenie grafov reálnych funkcií.
Tých\-to modulov (\verb|Base modules|) je okolo~40 (%viď 
\url{https://asymptote.sourceforge.io/doc/},
resp. súbor \verb|asymptote.pdf|, ktorý dostaneme zadaním
\verb|texdoc asymptote| na príkazovej úrovni --~v~oboch prípadoch \uv{Kapitola~8: Base modules}) 
a~do prostredí \verb|asy| sa načítavajú príkazom \verb|import|.
Základný modul je \verb|plain|, ktorý je nastavený implicitne.
Na animovanie dvojrozmerných obrázkov používame modul \verb|animation|.
Na vykresľovanie trojrozmerných grafov používame modul \verb|graph3|.
Z~ostatných modulov spomeňme napríklad
\verb|interpolate| (modul implementuje Lagrangeovú, Hermitovú a~štandardnú interpoláciu kubických spline do~\verb|Asymptote|),
\verb|geometry| (rôzne geometrické symboly, štruktúry, krivky~ap.),
\verb|stats| (rôzne štatistické funkcie),
\verb|patterns| (rôzne vzory na vypĺňanie plôch),
\verb|markers| (rôzne možnosti na označovanie vrcholov, hrán, ciest, uhlov~ap.),
\verb|tree|, \verb|binarytree|, \verb|drawtreetree| (binárne a~jednoduché stromy),
\verb|palette| (rôzne nastavena farieb),
\verb|three| (možnosť konverzie dvojrozmerných kriviek na trojrozmerné a~naopak),
\verb|grid3| (trojrozmerné mriežky),
\verb|flowchart| (vývojové diagramy) a~%
\verb|contour| (vrstevnice).

Rovnica krivky zvanej kardioida (srdcovka) má v~polárnych súradniciach rovnicu
$\rho(\varphi)=a(1+\cos{\varphi})$, $\varphi\in\langle 0,2\pi\rangle$, $a>0$.    
Táto krivka sa dá taktiež zostrojiť ako epicykloida, t.~j.
rovinná krivka, ktorú pri kotúľaní kružnice~$k$ po vonkajšej strane pevne danej kružnice~$K$ 
opisuje daný bod~$B$, ktorý je pevný vzhľadom na~$k$.  Kardioidu dostaneme, ak majú obe kružnice rovnaký polomer
a~bod~$B$ leží na obvode kružnice~$k$.
Na obr.~\ref{obr01} je kardoida vykreslená pomocou \verb|Asymptote|.


\begin{figure}[!ht]
\centering
{\scriptsize
\begin{minipage}[c]{0.5\linewidth}
\centering                                                         
%  \usepackage[T1]{fontenc}
%  \usepackage[utf8]{inputenc}
\begin{verbatim}
\documentclass{article}
\usepackage[inline]{asymptote} 
\begin{document}	
\pagestyle{empty}
\begin{asy}
  import graph;size(0,5cm);
  xaxis("$x$",above=true,p=gray);
  yaxis("$y$",above=true,p=gray);
  real f(real t) {return 1+cos(t);}
  path g=polargraph(f,0,2pi)--cycle;
  filldraw(g,pink+opacity(.5),drawpen=red);
  label("\large$f$",(1.5,1.25),red);
  dot("$0$",(0,0),N+E);
  dot("$a$",(1,0),N);dot("$2a$",(2,0),N+E);
\end{asy}
\end{document}
\end{verbatim}
\end{minipage}
%
\hfill
%
\begin{minipage}[c]{0.49\linewidth}
\phantom.
\centering
\begin{asy}
import graph;size(0,4.5cm);

xaxis("$x$",above=true,p=gray);yaxis("$y$",above=true,p=gray);

real f(real t) {return 1+cos(t);}
path g=polargraph(f,0,2pi)--cycle;
filldraw(g,pink+opacity(.5),drawpen=red);
label("\large$f$",(1.5,1.25),red);

dot("$0$",(0,0),N+E);dot("$a$",(1,0),N);dot("$2a$",(2,0),N+E);
\end{asy}
%\vfill
%\phantom.
\end{minipage}%
}%
\caption{Kardioida $f\!:\rho(\varphi)=a(1+\cos{\varphi})$, $\varphi\in\langle 0,2\pi\rangle$, $a>0$}    
\label{obr01}
\end{figure}



Modul \verb|animation| umožňuje generovať animované obrázky.
Tieto animácie využívajú prevodný program \verb|ImageMagick| na zlúčenie viacerých obrázkov do súborov
vo formáte \verb|.gif| alebo \verb|.mpeg|.
Vhodnejšie je použiť odvodený modul \verb|animate|, ktorý generuje vyššiu kvalitu obrázkov vo formáte \verb|.pdf|
s~možnosťami ovládania. Tento spôsob je podmienený inštaláciou balíčka \balicek{animate} v~\LaTeX-u
a~použiť ho môžeme v~prostredí \verb|asy| nasledovne:

\begin{verbatim}
usepackage("animate");
settings.tex="lualatex";
defaultpen(.25);
import animation;
\end{verbatim}

%\noindent
Ak animovanú časť označíme \verb|animation a;|, potom ovládacie menu animácie dostaneme napríklad príkazom

\begin{verbatim}
label(a.pdf(delay=250, "buttonsize=10pt, controls, autoplay,
                      loop, palindrome", multipage=false));
\end{verbatim}

Hypocykloida je rovinná krivka, ktorú pri kotúľaní kružnice~$k$ po obvode vnútornej strany pevne danej kružnice~$K$ 
(kružnica~$k$ je vo vnútri kružnice~$K$) opisuje daný bod~$B$, ktorý je pevný vzhľadom na~$k$.
Ak označíme $R>0$ polomer kružnice~$K$, $r>0$ polomer kružnice~$k$ ($r<R$),
$c\ge0$ vzdialenosť bodu~$B$ od stredu kružnice~$k$, potom môžeme hypocykloidu parametricky vyjadriť v~tvare
%
\begin{displaymath}
\textstyle 
x=(R\!-\!r)\cos{\frac{rt}{R}}+c\cos{\frac{(R-r)t}{R}},\quad
y=(R\!-\!r)\sin{\frac{rt}{R}}-c\sin{\frac{(R-r)t}{R}},\quad t\in R.
\end{displaymath}                                                                                  

Pohyb bodu~$B$ pre prípad $R=\frac{5r}{3}$, $c=\frac{3r}{2}$ je znázornený na obr.~\ref{obr02}.
Keďže sú pomery $\frac{r}{R}=\frac35$, $\frac{\smash{(R-r)}}{R}=\frac25$ racionálne čísla, 
funkcie sínus a~kosínus sú periodické s~periódou~$2\pi$,
pohyb sa uzavrie po piatich okruhoch, t.~j. po hodnote $t=10\pi$.
Uvedená hypocykloida je periodická s~periódou~$10\pi$ a~má tvar
%
\begin{displaymath}
\textstyle 
x=\frac{2r}{3}\cos{\frac{3t}{5}}+\frac{3r}{2}\cos{\frac{2t}{5}},\quad
y=\frac{2r}{3}\sin{\frac{3t}{5}}-\frac{3r}{2}\sin{\frac{2t}{5}},\quad t\in\langle 0,10\pi\rangle.
\end{displaymath}                                                                                  
 
Na začiatku zdrojového kódu sú definované základné hodnoty 
$c=\verb|cc|$,
$R=\verb|rv|$,
$r=\verb|rm|$,
\verb|rt| koniec definičného intervalu,
\verb|n| počet vykresľovaných bodov grafu.

{\scriptsize
\begin{verbatim}
\begin{asy}
real cc=1.5,u=5,v=3,rv=u/v,rm=1,rt=2*u,rp=rv-rm;int n=90;
import graph;
usepackage("animate");settings.tex="lualatex";defaultpen(.25);import animation;
size(0cm,5cm);
pair wheelpoint(real t)
  {return (rp*cos(t*rm/rv)+cc*cos(rp*t/rv),rp*sin(t*rm/rv)-cc*sin(rp*t/rv));}
guide wheel(guide g=nullpath,real a,real b,int n)
  {real width=(b-a)/n;for(int i=0;i<=n;++i) 
                            {real t=a+width*i;g=g--wheelpoint(t);} return g;}
real tinterval=rt*pi,t1=0,t2=t1+tinterval;draw(circle((0,0),rv),olive+.75);
animation a;
  pair z1=wheelpoint(t1);dot(z1,red);real dt=(t2-t1)/n;
for(int i=0;i<=n;++i) {save();
  real t=t1+dt*i;real kx=rp*cos(rm*t/rv);real ky=rp*sin(rm*t/rv);
  filldraw(circle((kx,ky),cc),.2paleblue+white,.2paleblue+white+.5);
  draw((0,0)--(rv*cos(rm*t/rv),rv*sin(rm*t/rv)),lightblue);
  if (t>0) {filldraw((kx,ky)--arc((kx,ky),rm,180*rm*t/rv/pi,
            -180*rp*t/rv/pi)--cycle,white+.75blue+opacity(.25),drawpen=lightblue);}
  draw(circle((0,0),rv),olive+.75);label("$K$",(-.6*rv,-.75*rv),SW,olive);
  draw(circle((0,0),rp),dotted+blue+white);
  draw(circle((0,0),rp-cc),yellow+.35red);draw(circle((0,0),rp+cc),yellow+.35red);
    label("$x$",(rv+.25,0),N);draw((-rv-.25,0)--(rv+.25,0));
    label("$y$",(0,rv+.25),W);draw((0,-rv-.25)--(0,rv+.25));
  draw(wheel(t1,t2,8*n),dotted+red);draw(circle((kx,ky),rm),blue+.75);
  label("$k$",(kx-.6,ky-.75),SW,blue);draw((kx,ky)--wheelpoint(t),black+.625);
    dot((kx,ky));dot(wheelpoint(t),red+black);draw(wheel(t1,t,8*max(1,i)),red+.5);
    label("\scriptsize$t="+string(t,7)+"$",(.3*rv,-rv),SE,blue);
  a.add();restore();} erase();
label(a.pdf(delay=250,"buttonsize=10pt,controls,autoplay,loop,
                                                palindrome",multipage=false));
\end{asy}
\end{verbatim}}

\begin{figure}[!th]
\centering
\ifx\malretezec\barevnost
%\ a nimategraphics[poster=first,controls=all]{12}{_mal-core-2}{}{}
\includegraphics[page=1]{_mal-core-2.pdf}\par
\addtocounter{asy}{1}%
\begin{tikzpicture}[scale=.2175]
%\begin{pgfinterruptboundingbox}
%\node at (0,0) {.\begin{asy}\end{asy}};
%\end{pgfinterruptboundingbox}
\draw[-,line width=.4,rounded corners=1.2] (0,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (.45,0.4) -- ++(0,.6);
  \draw[-,line width=.7,line join=round,line cap=round] (1.05,0.4) -- ++(-.45,.3) -- ++(.45,.3);
\draw[-,line width=.4,rounded corners=1.2] (1.6,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7,line join=round,line cap=round] (1.62+.925,0.4) -- ++(-.45,.3) -- ++(.45,.3);
\draw[-,line width=.4,rounded corners=1.2] (3.21,0) rectangle ++(3.02,1.4);
  \draw[-,line width=.7,line join=round] (3.24+1.51-.525,0.35) -- ++(-.55,.36) -- ++(.55,.36)--cycle;
  \draw[-,ultra thin] (3.24+1.51,0) -- ++(0,1.4);
  \draw[-,line width=.7,line join=round] (3.24+1.51+.525,0.35) -- ++(.55,.36) -- ++(-.55,.36)--cycle;
\draw[-,line width=.4,rounded corners=1.2] (6.45,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7,line join=round,line cap=round] (6.48+1.4-.925,0.4) -- ++(.45,.3) -- ++(-.45,.3);
\draw[-,line width=.4,rounded corners=1.2] (8.06,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (8.1+1.4-.45,0.4) -- ++(0,.6);
  \draw[-,line width=.7,line join=round,line cap=round] (8.1+1.4-1.05,0.4) -- ++(.45,.3) -- ++(-.45,.3);
\draw[-,line width=.4,rounded corners=1.2] (10.17,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7] (10.17+.4,.7) -- ++(.6,0);
\draw[-,line width=.4,rounded corners=1.2] (11.79,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (11.79+.7,0.4) -- ++(0,.6);
  \draw[-,fill,ultra thin] (11.79+.7+.07,.7) -- ++(.35,.25) -- ++(0,-.5)--cycle;
  \draw[-,line width=.7] (11.79+1.4-.16,.7) -- ++(-.3,0);
  \draw[-,fill,ultra thin] (11.79+.7-.07,.7) -- ++(-.35,.25) -- ++(0,-.5)--cycle;
  \draw[-,line width=.7] (11.79+.16,.7) -- ++(.3,0);
\draw[-,line width=.4,rounded corners=1.2] (13.4,0) rectangle ++(1.4,1.4);
  \draw[-,line width=.7] (13.4+.4,0.7) -- ++(.6,0);
  \draw[-,line width=.7] (13.4+.7,0.4) -- ++(0,.6);
\end{tikzpicture}%
%

\else
\begin{asy}
real cc=1.5,u=5,v=3,rv=u/v,rm=1,rt=2*u,rp=rv-rm;int n=90;

import graph;

usepackage("animate");settings.tex="lualatex";defaultpen(.25);import animation;

size(0cm,6.cm);
pair wheelpoint(real t)
  {return (rp*cos(t*rm/rv)+cc*cos(rp*t/rv),rp*sin(t*rm/rv)-cc*sin(rp*t/rv));}

guide wheel(guide g=nullpath,real a,real b,int n)
  {real width=(b-a)/n;for(int i=0;i<=n;++i) 
                            {real t=a+width*i;g=g--wheelpoint(t);} return g;}
real tinterval=0*rt*pi,t1=0,t2=t1+tinterval;draw(circle((0,0),rv),olive+.75);
real t1=8.8*pi/3;                 //navyse 

animation a;
  pair z1=wheelpoint(t1);dot(z1,red);real dt=(t2-t1)/n;

for(int i=0;i<=n;++i) {save();
  real t=t1+dt*i,kx=rp*cos(rm*t/rv),ky=rp*sin(rm*t/rv);
  filldraw(circle((kx,ky),cc),.2paleblue+white,.2paleblue+white+.5);
  draw((0,0)--(rv*cos(rm*t/rv),rv*sin(rm*t/rv)),lightblue);
  if (t>0) {filldraw((kx,ky)--arc((kx,ky),rm,180*rm*t/rv/pi,-180*rp*t/rv/pi)--cycle,white+.75blue+opacity(.25),drawpen=lightblue);}

  draw(circle((0,0),rv),olive+.75);label("$K$",(-.6*rv,-.75*rv),SW,olive);
  draw(circle((0,0),rp),dotted+blue+white);
  draw(circle((0,0),rp-cc),yellow+.35red);draw(circle((0,0),rp+cc),yellow+.35red);

    label("$x$",(rv+.25,0),N);draw((-rv-.25,0)--(rv+.25,0));
    label("$y$",(0,rv+.25),W);draw((0,-rv-.25)--(0,rv+.25));

  draw(wheel(0,10*pi,8*n),dotted+red);draw(circle((kx,ky),rm),blue+.75);
  label("$k$",(kx-.6,ky-.75),SW,blue);draw((kx,ky)--wheelpoint(t),black+.625);
    dot((kx,ky));dot(wheelpoint(t),red+black);draw(wheel(t1,t,8*max(1,i)),red+.5);

dot(wheelpoint(0),red+black);draw(wheel(0,t1,8*n),red+.5);         //navyse
    label("\scriptsize$t="+string(t,7)+"$",(.3*rv,-rv),SE,blue);
  a.add();restore();} erase();

//...............toto pouzit pri online verzii (pri tlaci sa nezobrazi menu s animate) a TiKz obrazok zapoznamkovat 
label(a.pdf(delay=250,"buttonsize=10pt,controls,loop,palindrome",multipage=false));

//...............toto pouzit pri tlacenej verzii (dole je pomocou tikz nakreslene menu)
//label(a.pdf(delay=250));
\end{asy}
\fi

%%%%  nasledujuci TiKz obrazok vykresli iba obrazok animate menu, ktory sa pri print verzii nezobrazuje
%%%%  pri online verzii   ZAPOZNAMKOVAT!!!!!

%\begin{tikzpicture}[scale=.2175]
%\draw[-,line width=.4,rounded corners=1.2] (0,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (.45,0.4) -- ++(0,.6);
%  \draw[-,line width=.7,line join=round,line cap=round] (1.05,0.4) -- ++(-.45,.3) -- ++(.45,.3);
%\draw[-,line width=.4,rounded corners=1.2] (1.6,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7,line join=round,line cap=round] (1.62+.925,0.4) -- ++(-.45,.3) -- ++(.45,.3);
%\draw[-,line width=.4,rounded corners=1.2] (3.21,0) rectangle ++(3.02,1.4);
%  \draw[-,line width=.7,line join=round] (3.24+1.51-.525,0.35) -- ++(-.55,.36) -- ++(.55,.36)--cycle;
%  \draw[-,ultra thin] (3.24+1.51,0) -- ++(0,1.4);
%  \draw[-,line width=.7,line join=round] (3.24+1.51+.525,0.35) -- ++(.55,.36) -- ++(-.55,.36)--cycle;
%\draw[-,line width=.4,rounded corners=1.2] (6.45,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7,line join=round,line cap=round] (6.48+1.4-.925,0.4) -- ++(.45,.3) -- ++(-.45,.3);
%\draw[-,line width=.4,rounded corners=1.2] (8.06,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (8.1+1.4-.45,0.4) -- ++(0,.6);
%  \draw[-,line width=.7,line join=round,line cap=round] (8.1+1.4-1.05,0.4) -- ++(.45,.3) -- ++(-.45,.3);
%\draw[-,line width=.4,rounded corners=1.2] (10.17,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7] (10.17+.4,.7) -- ++(.6,0);
%\draw[-,line width=.4,rounded corners=1.2] (11.79,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7,rounded corners=1.2,line cap=round] (11.79+.7,0.4) -- ++(0,.6);
%  \draw[-,fill,ultra thin] (11.79+.7+.07,.7) -- ++(.35,.25) -- ++(0,-.5)--cycle;
%  \draw[-,line width=.7] (11.79+1.4-.16,.7) -- ++(-.3,0);
%  \draw[-,fill,ultra thin] (11.79+.7-.07,.7) -- ++(-.35,.25) -- ++(0,-.5)--cycle;
%  \draw[-,line width=.7] (11.79+.16,.7) -- ++(.3,0);
%\draw[-,line width=.4,rounded corners=1.2] (13.4,0) rectangle ++(1.4,1.4);
%  \draw[-,line width=.7] (13.4+.4,0.7) -- ++(.6,0);
%  \draw[-,line width=.7] (13.4+.7,0.4) -- ++(0,.6);
%\end{tikzpicture}
\caption{Príklad animácie hypocykloidy}    
\label{obr02}
\end{figure}




%..............................................
\section{Asymptote a 3D obrázky}

Vytvoriť 3D~obrázok v~programe \verb|Asymptote| je pomerne jednoduché.
Výsledný obrázok je porovnateľný s~3D obrázkami vytvorenými v~komerčných programoch 
Wolfram Mathematica a~Maple.
K~používaniu %programu~
\verb|Asymptote| ma priviedla nutnosť.
V~pripravovanej publikácii z~matematickej analýzy funkcií viacerých premenných som potreboval
vykresľovať grafy funkcií dvoch premenných.
Jedna z~možností je použiť balíček \malTikZ{} ---~ďaľší výkonný prostriedok na vektorovú grafiku implementovaný do~\TeX-u.
Problém je, že \mbox{v~\malTikZ-e} nakreslíme prekrásne~2D a~aj~3D obrázky 
(grafy funkcií, schémy, štatistické grafy, chemické grafy~atď.), 
ale 3D~obrázky nedokážeme interaktívne otáčať, zmenšovať, pohybovať.
Druhá možnosť bola použiť obrázky z~komerčného programu Wolfram Mathematica, ktorého licenciu mám v~legálnom držaní.
Z~tohto programu som nedokázal exportovať obrázky akceptovateľné \mbox{v~\TeX-u}, t.~j. \verb|.pdf|~formáte.
Ešte som mohol použiť Open Source program wxMaxima, ale v~tomto prípade je situácia obdobná.

Pre nasledujúce obrázky sú definované nové farby v~prostredí \verb|asydef|.

{\scriptsize
\begin{verbatim}
\begin{asydef}
  pen blackIV=black*0.40+white*0.60;
  pen blackII=black*0.20+white*0.80;
  pen PPblueblack=blue*0.50+black*0.50;
  pen PPoliveblack=heavygreen*0.50+black*0.50;
  pen PPblueblackI =PPblueblack*0.60+white*0.40;
  pen blueII=blue*0.20+white*0.80;
  pen blueV=blue*0.50+white*0.50;
\end{asydef}
\end{verbatim}}

\begin{figure}[!ht]
\centering
{\scriptsize
\begin{minipage}[c]{0.46\linewidth}
\begin{verbatim}
\begin{asy}
import graph3;import palette;
size(175,175,IgnoreAspect);
currentprojection=perspective(2,.55,0.25);
real f(pair z) {return sin(z.x)*sin(z.y);}
draw(surface(f,(-pi,-pi),(pi,pi),nx=24,
     Spline),lightblue,render(merge=true));
surface f=surface(f,(-pi,-pi),(pi,pi),
                               24,Spline);
draw(f,mean(palette(f.map(zpart),
                     Rainbow(24))),brown);
draw(Label("$x$",1),
  (-1.2pi,0,0)--(1.2pi,0,0),brown,Arrow3);
draw(Label("$y$",1),
  (0,-1.2pi,0)--(0,1.2pi,0),brown,Arrow3);
draw(Label("$z$",1),
  (0,0,-1.2)--(0,0,1.2),brown,Arrow3);
label("$z=\sin{x}\cdot\sin{y}$",
  (.5,.5,-1.35),SE,deepblue);
\end{asy}
\end{verbatim}
\end{minipage}
%
%\hfill
%
\begin{minipage}[c]{0.53\linewidth}
\centering
%\resizebox{0.8}{!}{%
\begin{asy}
import graph3;
import palette;

size(175,175,IgnoreAspect);

currentprojection=perspective(2,.55,0.25);

real f(pair z) {return sin(z.x)*sin(z.y);}

draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),lightblue,render(merge=true));
surface f=surface(f,(-pi,-pi),(pi,pi),24,Spline);
draw(f,mean(palette(f.map(zpart),Rainbow(24))),brown);

draw(Label("$x$",1),(-1.2pi,0,0)--(1.2pi,0,0),brown,Arrow3);
draw(Label("$y$",1),(0,-1.2pi,0)--(0,1.2pi,0),brown,Arrow3);
draw(Label("$z$",1),(0,0,-1.2)--(0,0,1.2),brown,Arrow3);
label("$z=\sin{x}\cdot\sin{y}$",(.5,.5,-1.35),SE,deepblue);
\end{asy}
%}
\end{minipage}

\noindent
\hspace*{-10mm}%
\begin{minipage}[c]{0.49\linewidth}
%\centering
\begin{asy}
import graph3;
import palette;

size(175,175,IgnoreAspect);

currentprojection=orthographic(2,.55,.25);

real f(pair z) {return sin(z.x)*sin(z.y);}

draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),blue+opacity(.75),render(merge=true));
surface f=surface(f,(-pi,-pi),(pi,pi),24,Spline);
draw(f,mean(palette(f.map(zpart),Rainbow(24))),brown);

draw(Label("$x$",1),(-1.2pi,0,0)--(1.2pi,0,0),brown,Arrow3);
draw(Label("$y$",1),(0,-1.2pi,0)--(0,1.2pi,0),brown,Arrow3);
draw(Label("$z$",1),(0,0,-1.2)--(0,0,1.2),brown,Arrow3);
label("$z=\sin{x}\cdot\sin{y}$",(.5,.5,-1.35),SE,deepblue);
\end{asy}
\end{minipage}
%
%\hfill
\kern4mm
%
\begin{minipage}[c]{0.49\linewidth}
\begin{asy}
import graph3;
import palette;

size(175,175,IgnoreAspect);

currentprojection=orthographic(2,.55,.25);

real f(pair z) {return sin(z.x)*sin(z.y);}

draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));

draw(Label("$x$",1),(-1.2pi,0,0)--(1.2pi,0,0),brown,Arrow3);
draw(Label("$y$",1),(0,-1.2pi,0)--(0,1.2pi,0),brown,Arrow3);
draw(Label("$z$",1),(0,0,-1.2)--(0,0,1.2),brown,Arrow3);
label("$z=\sin{x}\cdot\sin{y}$",(.5,.5,-1.35),SE,deepblue);
\end{asy}
\end{minipage}%
}
\caption{Graf funkcie $z=\sin{x}\cdot\sin{y}$, $(x,y)\in\langle-\pi,\pi\rangle\times\langle-\pi,\pi\rangle$}    
\label{obr03}
\end{figure}

Pri tvorbe grafov pomocou~\verb|Asymptote| sa štandartne definuje transparentné pozadie až na 3D~grafy.
S~načítaním modulu \verb|graph3| sa nastaví biele pozadie obrázku, dajú sa nastaviť rôzne farby až na~transparentné pozadie.
Na úvod uvedieme príklad trojrozmerného grafu vytvoreného v~\verb|Asymptote|.
Na obr.~\ref{obr03} je znázornený v~karteziánskych súradniciach graf funkcie $z=\sin{x}\cdot\sin{y}$ na intervale 
$\langle-\pi,\pi\rangle\times\langle-\pi,\pi\rangle$. 
Uvedené sú tri grafické modifikácie tohto obrázku.
Prvý podobrázok (vpravo hore) zodpovedá napísanému zdrojovému kódu,
na ostatných dvoch je zmenená projekcia

\noindent\hfil
\verb|currentprojection=perspective(2,.55,0.25);| 

\noindent
na 
\verb|currentprojection=orthographic(2,.55,.25);|.

Na druhom podobrázku (vľavo dole) je v~riadku

\begin{verbatim}
draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),
                          lightblue,render(merge=true));
\end{verbatim}

\noindent
nahradená farba \verb|lightblue| farbou \verb|blue+opacity(.75)|, t.~j.

\begin{verbatim}
draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),
                   blue+opacity(.75),render(merge=true));
\end{verbatim}

\noindent
a~na poslednom podobrázku je uvedený riadok a~nasledujúce dva riadky

\begin{verbatim}
surface f=surface(f,(-pi,-pi),(pi,pi),24,Spline);
draw(f,mean(palette(f.map(zpart),Rainbow(24))),brown);
\end{verbatim}

\noindent
nahradené jediným riadkom

\begin{verbatim}
draw(surface(f,(-pi,-pi),(pi,pi),nx=24,Spline),
         blueII+opacity(.5),meshpen=PPblueblackI+thick(),
                             nolight,render(merge=true));
\end{verbatim}

Na obr.~\ref{obr04} je graf kvadratickej formy $f(x,y)=x^2-y^2$, $(x,y)\in R^2$ znázornený na intervale
$\langle -2,2\rangle\times\langle -2,2\rangle$.


\begin{figure}[!ht]
%\centering
{\scriptsize
\begin{minipage}[c]{0.69\linewidth}
\begin{verbatim}
\begin{asy}
import graph3;
texpreamble("\usepackage{amsmath}");
size(3.5cm,0);
currentprojection=orthographic(2,2.5,2.5);
real f(pair z) {return z.x^2-z.y^2;}
surface s=surface(f,(-2,-2),(2,2),nx=8,Spline);
draw(s,blueII+opacity(.75),meshpen=PPblueblackI+thick(),
                                nolight,render(merge=true));
label(scale(.65)*"$f$",2X+4Z,-X,PPblueblackI);
draw(Label("$4$",position=BeginPoint),(.05,0,4)--(-.05,0,4));
// ...
draw(Label("$x$",position=EndPoint),(-3,0,0)--(3,0,0),Arrow3);
draw(Label("$y$",position=EndPoint),(0,-3,0)--(0,3,0),Arrow3);
draw(Label("$z$",position=EndPoint),(0,0,-5)--(0,0,5),Arrow3);
\end{asy}
\end{verbatim}
\end{minipage}%
%
%\hfill
%
\begin{minipage}[c]{0.28\linewidth}
%\centering
\begin{asy}
import graph3;
texpreamble("\usepackage{amsmath}");
size(3.5cm,0);
currentprojection=orthographic(2,2.5,2.5);
  
real f(pair z) {return z.x^2-z.y^2;}
surface s=surface(f,(-2,-2),(2,2),nx=8,Spline);
draw(s,blueII+opacity(.75),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
label(scale(.65)*"$f$",2X+4Z,-X,PPblueblackI);

draw(Label(scale(.65)*"$-1$",position=BeginPoint),(.05,0,-1)--(-.05,0,-1));
draw(Label(scale(.65)*"$-2$",position=BeginPoint),(.05,0,-2)--(-.05,0,-2));
draw(Label(scale(.65)*"$-3$",position=BeginPoint),(.05,0,-3)--(-.05,0,-3));
draw(Label(scale(.65)*"$-4$",position=BeginPoint),(.05,0,-4)--(-.05,0,-4));
draw(Label(scale(.65)*"$1$",position=EndPoint),(.05,0,1)--(-.05,0,1));
draw(Label(scale(.65)*"$2$",position=EndPoint),(.05,0,2)--(-.05,0,2));
draw(Label(scale(.65)*"$3$",position=EndPoint),(.05,0,3)--(-.05,0,3));
draw(Label(scale(.65)*"$4$",position=EndPoint),(.05,0,4)--(-.05,0,4));

draw(Label(scale(.65)*"$2$",position=EndPoint),(2,0,.05)--(2,0,-.05));
draw(Label(scale(.65)*"$1$",position=EndPoint),(1,0,.05)--(1,0,-.05));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(-1,0,.05)--(-1,0,-.05));
draw(Label(scale(.65)*"$-2$",position=EndPoint),(-2,0,.05)--(-2,0,-.05));
draw(Label(scale(.65)*"$2$",position=EndPoint),(0,2,.05)--(0,2,-.05));
draw(Label(scale(.65)*"$1$",position=EndPoint),(0,1,.05)--(0,1,-.05));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(0,-1,.05)--(0,-1,-.05));
draw(Label(scale(.65)*"$-2$",position=EndPoint),(0,-2,.05)--(0,-2,-.05));

draw(Label(scale(.75)*"$x$",position=EndPoint),(-3,0,0)--(3,0,0),Arrow3);
draw(Label(scale(.75)*"$y$",position=EndPoint),(0,-3,0)--(0,3,0),Arrow3);
draw(Label(scale(.75)*"$z$",position=EndPoint),(0,0,-5)--(0,0,5),Arrow3);
\end{asy}
\end{minipage}%
}
\caption{Graf funkcie $f(x,y)=x^2-y^2$, $(x,y)\in R^2$}
\label{obr04}
\end{figure}


\begin{figure}[!ht]
{\scriptsize
\begin{minipage}[c]{0.67\linewidth}
\begin{verbatim}
\begin{asy}
import graph3;size(3.5cm,0);
currentprojection=orthographic(1.25,1,2.5);
real f(pair z) {real r=z.x^2+z.y^2; return r>=0.02 
     ? min(8,sqrt(z.x^2+z.y^2)/
     (sqrt(z.x^2+z.y^2+1)-1)) : 0 ;}
bool allow(pair z) {return f(z)>0;}
surface s=surface(f,(-1.5,-1.5),(1.5,1.5),nx=16,allow);
draw(s,blueII+opacity(.75),meshpen=PPblueblackI+thick(),
                              nolight,render(merge=true));
draw(Label("$7$",position=EndPoint),(.05,0,7)--(-.05,0,7));
// ...
draw(Label("$x$",position=EndPoint),(-2,0,0)--(1,0,0),Arrow3);
draw(Label("$y$",position=EndPoint),(0,-2,0)--(0,1,0),Arrow3);
draw(Label("$z$",position=EndPoint),(0,0,-1)--(0,0,9),Arrow3);
draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.75)*"$0$",.25Z+.25Z,Y,PPblueblack);
\end{asy}
\end{verbatim}
\end{minipage}%
%
%\hfill
%
\begin{minipage}[c]{0.28\linewidth}
\centering
\begin{asy}
import graph3;
size(3.5cm,0);
currentprojection=orthographic(1.25,1,2.5);

real f(pair z) {real r=z.x^2+z.y^2;
  return r>=0.02 ? min(8,sqrt(z.x^2+z.y^2)/(sqrt(z.x^2+z.y^2+1)-1)) : 0 ;}

bool allow(pair z) {return f(z)>0;}
surface s=surface(f,(-1.5,-1.5),(1.5,1.5),nx=16,allow);
draw(s,blueII+opacity(.75),meshpen=PPblueblackI+thick(),nolight,render(merge=true));

draw(Label(scale(.65)*"$1$",position=EndPoint),(.05,0,1)--(-.05,0,1));
draw(Label(scale(.65)*"$2$",position=EndPoint),(.05,0,2)--(-.05,0,2));
draw(Label(scale(.65)*"$3$",position=EndPoint),(.05,0,3)--(-.05,0,3));
draw(Label(scale(.65)*"$4$",position=EndPoint),(.05,0,4)--(-.05,0,4));
draw(Label(scale(.65)*"$5$",position=EndPoint),(.05,0,5)--(-.05,0,5));
draw(Label(scale(.65)*"$6$",position=EndPoint),(.05,0,6)--(-.05,0,6));
draw(Label(scale(.65)*"$7$",position=EndPoint),(.05,0,7)--(-.05,0,7));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(-1,0,.05)--(-1,0,-.05));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(0,-1,.05)--(0,-1,-.05));

draw(Label(scale(.75)*"$x$",position=EndPoint),(-2,0,0)--(1,0,0),Arrow3);
draw(Label(scale(.75)*"$y$",position=EndPoint),(0,-2,0)--(0,1,0),Arrow3);
draw(Label(scale(.75)*"$z$",position=EndPoint),(0,0,-1)--(0,0,9),Arrow3);

draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.65)*"$0$",.25Z+.25Z,Y,PPblueblack);
\end{asy}
\end{minipage}%
}%
\caption{Graf funkcie $f(x,y)=\frac{\sqrt{x^2+y^2}}{\sqrt{x^2+y^2+1}-1}$,\\ $(x,y)\in R^2-\{(0,0)\}$ v~okolí bodu~$(0,0)$}
\label{obr05}
\end{figure}

Na obr.~\ref{obr05} je graf dvojrozmernej funkcie 
$$
\textstyle
f(x,y)=\frac{\sqrt{x^2+y^2}}{\sqrt{x^2+y^2+1}-1},\quad (x,y)\in R^2-\{(0,0)\}.
$$
Obrázok ilustruje limitný prechod $f(x,y)\to\infty$ pre $(x,y)\to(0,0)$.
Funk\-čné hodnoty funkcie~$f$ v~okolí bodu~$(0,0)$ s polomerom $r=0.02$ sú z~grafu vyrezané.
Keďže graf vykresľuje iba 16~vrstevníc rovnobežných (teda ich priemetov do roviny~$xy$) s~osou~$x$
a~16~vrstevníc rovnobežných s~osou~$y$ hrany okolia tvoria uzavretú lineárnu lomenú čiaru.
Pri väčšom počte vrstevníc by sa graf \uv{vylepšil}, ale aj zbytočne predĺžil preklad.
Ale výpovedná hodnota obrázku by sa prakticky nezlepšila.



\begin{figure}[!ht]
\centering
{\scriptsize
\begin{verbatim}
\begin{asy}
import graph3;size(3.5cm,0);
currentprojection=orthographic(1.25,1,2.5);
draw(shift(.2X+.2Y)*surface(scale(.75,1.2)*unitcircle),blackII+opacity(.25),nolight);
triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), ((xx)*cos(t.y))^2-((xx)*sin(t.y))^2+3);}
\end{verbatim}}

\begin{minipage}[c]{0.71\linewidth}
{\scriptsize
\begin{verbatim}
surface s=surface(f,(0,0),(1,2*pi),8,8,
   usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
   vsplinetype=Spline);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*s,blueII+opacity(.5),
     meshpen=PPblueblackI+thick(),nolight,render(merge=true));
real x(real t) {return cos(t);}
real y(real t) {return sin(t);}
real z(real t) {return 0;}
real w(real t) {return cos(t)*cos(t)-sin(t)*sin(t)+3;}
path3 p1=graph(x,y,z,0,2*pi,operator ..);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*p1,PPblueblackI);
path3 p2=graph(x,y,w,pi/2,pi,operator ..);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*p2,PPblueblack+1.5);
draw(Label("$0$",position=EndPoint),(0,0,.05)--(0,0,-.15));
draw(Label("$4$",position=EndPoint),(.05,0,4)--(-.05,0,4));
// ...
\end{verbatim}}
\end{minipage}
%
\hfill
%
\begin{minipage}[c]{0.28\linewidth}
\centering
\begin{asy}
import graph3;
size(3.5cm,0);
currentprojection=orthographic(1.25,1,2.5);

draw(shift(.2X+.2Y)*surface(scale(.75,1.2)*unitcircle),blackII+opacity(.25),nolight);

 //function: call the radial coordinate r=t.x and the angle phi=t.y
triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), ((xx)*cos(t.y))^2-((xx)*sin(t.y))^2+3);}
surface s=surface(f,(0,0),(1,2*pi),8,8,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*s,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));

real x(real t) {return cos(t);}
real y(real t) {return sin(t);}
real z(real t) {return 0;}
real w(real t) {return cos(t)*cos(t)-sin(t)*sin(t)+3;}
path3 p1=graph(x,y,z,0,2*pi,operator ..);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*p1,PPblueblackI);
path3 p2=graph(x,y,w,pi/2,pi,operator ..);
draw(shift(.2X+.2Y)*scale(.75,1.2,1)*p2,PPblueblack+1.5);

draw(Label(scale(.65)*"$0$",position=EndPoint),(0,0,.05)--(0,0,-.15));
draw(Label(scale(.65)*"$1$",position=EndPoint),(.05,0,1)--(-.05,0,1));
draw(Label(scale(.65)*"$2$",position=EndPoint),(.05,0,2)--(-.05,0,2));
draw(Label(scale(.65)*"$3$",position=EndPoint),(.05,0,3)--(-.05,0,3));
draw(Label(scale(.65)*"$4$",position=EndPoint),(.05,0,4)--(-.05,0,4));
draw(Label(scale(.65)*"$1$",position=EndPoint),(1,0,.05)--(1,0,-.05));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(-1,0,.05)--(-1,0,-.05));
draw(Label(scale(.65)*"$1$",position=EndPoint),(0,1,.05)--(0,1,-.05));
draw(Label(scale(.65)*"$-1$",position=EndPoint),(0,-1,.05)--(0,-1,-.05));

draw(Label(scale(.75)*"$x$",position=EndPoint),(-1.25,0,0)--(1.75,0,0),Arrow3);
draw(Label(scale(.75)*"$y$",position=EndPoint),(0,-1.25,0)--(0,2,0),Arrow3);
draw(Label(scale(.75)*"$z$",position=EndPoint),(0,0,-.25)--(0,0,5.1),Arrow3);

label(scale(.65)*"$A$",.8X-.2Y,Z,PPblueblackI);
label(scale(.65)*"$f(A)$",.8X-.2Y+3.25Z,-Z,PPblueblackI);

draw(shift(-.55X+.2Y+4Z)*scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.65)*"$\max{f(A)}$",-.55X+.2Y+4.2Z,Z,PPblueblack);
draw(shift(.2X+1.4Y+2Z)*scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.65)*"$\min{f(A)}$",.2X+1.4Y+1.8Z,-Z,PPblueblack);
\end{asy}
\end{minipage}

{\scriptsize
\begin{verbatim}
draw(Label("$x$",position=EndPoint),(-1.25,0,0)--(1.75,0,0),Arrow3);
draw(Label("$y$",position=EndPoint),(0,-1.25,0)--(0,2,0),Arrow3);
draw(Label("$z$",position=EndPoint),(0,0,-.25)--(0,0,5.1),Arrow3);
label(scale(.75)*"$A$",.8X-.2Y,Z,PPblueblackI);
label(scale(.75)*"$f(A)$",.8X-.2Y+3.25Z,-Z,PPblueblackI);
draw(shift(-.55X+.2Y+4Z)*scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.75)*"$\max{f(A)}$",-.55X+.2Y+4.2Z,Z,PPblueblack);
draw(shift(.2X+1.4Y+2Z)*scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.75)*"$\min{f(A)}$",.2X+1.4Y+1.8Z,-Z,PPblueblack);
\end{asy}
\end{verbatim}}
\caption{Graf funkcie $f(x,y)=x^2-y^2+3$, $(x,y)\in R^2$}
\label{obr06}
\end{figure}


Graf dvojrozmernej funkcie  $f(x,y)=x^2-y^2+3$, $(x,y)\in R^2$ (obr.~\ref{obr06}) je znázornený pomocou polárnych súradníc.
Definičný obor, t.~j. nezávislé premenné~$x$ a~$y$ sú vyjadrené pomocou vzťahov
$x=\rho\cos{\varphi}$, $y=\rho\sin{\varphi}$ a~obraz pomocou vzťahu
$f(x,y)=(\rho\cos{\varphi})^2-(\rho\sin{\varphi})^2+3$.
V~našom prípade to je časť príkazu

\begin{verbatim}
return ((xx)*cos(t.y),(xx)*sin(t.y), 
                      ((xx)*cos(t.y))^2-((xx)*sin(t.y))^2+3);
\end{verbatim}

\noindent
Súčasťou grafu je krivka~\verb|p1| spájajúca maximálnu hodnotu a~minimálnu hodnotu zobrazeného grafu
a~jej priemet do roviny~$xy$.
Obe sú definované parametricky pomocou trojice bodov 
\verb|x(real t)|,
\verb|y(real t)|,
\verb|w(real t)|, resp.
\verb|x(real t)|,
\verb|y(real t)|,
\verb|z(real t)|.

\enlargethispage{\baselineskip}% mal

Na záver uvedieme na ilustráciu ešte tri priestorové grafy vytvorené pomocou programu \verb|Asymptote|.
Na prvom (obr.~\ref{obr07}) je znázornená priestorová špirála~$f$ zadaná v~parametrickom tvare 
a~dotyková priamka v~jej bode.

\newpage
{\scriptsize
\begin{verbatim}
\begin{asy}
import graph3;size(3cm,0);
currentprojection=orthographic(2,2.5,2);
draw(box(O,(-.383616,1.180650,1.95)),blackII+linewidth(.25)+opacity(.5));
draw(shift(-.383616X)*scale(.05,.05,.05)*unitsphere,black);
draw(shift(1.180650Y)*scale(.05,.05,.05)*unitsphere,black);
draw(shift(1.95Z)*scale(.05,.05,.05)*unitsphere,black);
label(scale(.5)*"$x(t_0)$",(-.383616,0,0),Y,black);
label(scale(.5)*"$y(t_0)$",(0,1.180650,0),X,black);
label(scale(.5)*"$z(t_0)$",(0,0,1.95),X,black);
draw(Label(scale(.65)*"$x$",position=EndPoint),(-2,0,0)--(2,0,0),Arrow3);
draw(Label(scale(.65)*"$y$",position=EndPoint),(0,-2,0)--(0,2,0),Arrow3);
draw(Label(scale(.65)*"$z$",position=EndPoint),(0,0,-.25)--(0,0,4.2),Arrow3);
  triple p(real t) { return (2*t*sin(2pi*t)/pi,2*t*cos(2pi*t)/pi,t); }
path3 pp=graph(p,0,2.95,operator ..);
draw(Label(scale(.65)*"$f$",position=EndPoint),pp,PPblueblack+1);
draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
draw(shift(-.383616X+1.180650Y+1.95Z)*scale(.075,.075,.075)*unitsphere,PPblueblack+1);
label(scale(.6)*"$f(t_0)$",(-.383616,1.180650,1.95),Y,PPblueblack+1);
  triple d(real t) { return (-.383616+7.221514*t,1.180650+3.015794*t,1.95+t); }
path3 dd=graph(d,-.24,.24,operator ..);
draw(Label(scale(.65)*"$d$",position=BeginPoint),dd,PPoliveblack+1);
  triple d0(real t) { return (-.383616+7.221514*t,1.180650+3.015794*t,0); }
path3 dd0=graph(d0,.24,-.24,operator ..);
draw(dd0--dd--cycle,blackII+linewidth(.25));draw(dd0,blackII+.5);
\end{asy}
\end{verbatim}}


Na ďaľšom obrázku~\ref{obr08} 
je znázornený rozklad jednotkového vektora $\boldsymbol{u}\in R^3$, $\Vert\boldsymbol{u}\Vert=1$ 
na uhly~$\gamma_1$, $\gamma_2$, $\gamma_3$, ktoré zviera so súradnicovými 
osami~$x_1$, $x_2$, $x_3$.
Platí $\boldsymbol{u}=(u_1,u_2,u_3)=(\cos{\gamma_1},\cos{\gamma_2},\cos{\gamma_3})$,
$\Vert\boldsymbol{u}\Vert=\sqrt{u_1^2+u_2^2+u_3^2}=\sqrt{\cos^2{\gamma_1}+\cos^2{\gamma_2}+\cos^2{\gamma_3}}=1$.

{\scriptsize
\begin{verbatim}
\begin{asy}
import graph3;import labelpath3;
texpreamble("\usepackage{amsmath}");unitsize(.64cm);
currentprojection=orthographic(2.5,2,1);
draw(shift(2.42X)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_1$",(2.2,0,0),-Z);
draw(shift(.88Y)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_2$",(0,.8,0),-Z);
draw(shift(2.2Z)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_3$",(0,0,2),-Y+.5Z);
draw(Label(scale(.65)*"$x_1$",position=EndPoint),(-.25,0,0)--(3,0,0),Arrow3(5));
draw(Label(scale(.65)*"$x_2$",position=EndPoint),(0,-.25,0)--(0,2.5,0),Arrow3(5));
draw(Label(scale(.65)*"$x_3$",position=EndPoint),(0,0,-.25)--(0,0,3.5),Arrow3(5));
draw(scale(2.42,.88,2.2)*unitbox,blackIV+linewidth(.25));
draw((2.42,0,0)--(2.42,.88,2.2) ^^ (0,.88,0)--(2.42,.88,2.2) ^^ 
                                      (0,0,2.2)--(2.42,.88,2.2),blackIV+linewidth(.25));
draw(shift(1.1X+1.6Y+2.4Z)*scale(.075,.075,.075)*unitsphere,PPblueblack);
label(scale(.65)*"$\boldsymbol{a}$",1.1X+1.6Y+2.4Z,1.1Y-Z,PPblueblack);
draw((1.1,1.6,2.4)--(2.7,1.6,2.4) ^^ (1.1,1.6,2.4)--(1.1,3.2,2.4) ^^ 
                                       (1.1,1.6,2.4)--(1.1,1.6,4),blueV+linewidth(.25));
draw(shift(1.1X+1.6Y+2.4Z)*rotate(-21.801409,X)*rotate(90,Y)
                                     *arc(O,1.5,0,90,-44.395569,0,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_1$",2.000127X+1.736410Y+2.741024Z,blueV);
draw(shift(1.1X+1.6Y+2.4Z)*rotate(47.726311,Y)*rotate(-90,X)
                                    *arc(O,1.5,0,90,-74.940148,90,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_2$",1.475127X+2.261410Y+2.741024Z,blueV);
draw(shift(1.1X+1.6Y+2.4Z)*rotate(111.801409,Z)
                                   *arc(O,1.5,0,-90,-49.490825,90,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_3$",1.475127X+1.736410Y+3.266024Z,blueV);
draw(shift(2.42X)*rotate(-21.801409,X)*arc(O,.4,0,90,-90,0,CCW),blackIV+linewidth(.25));
draw(shift(2.2506X+.0616Y+.154Z)*scale(.03,.03,.03)*unitsphere,blackIV);
draw(shift(.88Y)*rotate(47.726311,Y)*arc(O,.4,0,90,-90,90,CCW),blackIV+linewidth(.25));
draw(shift(.15125X+.715Y+.1375Z)*scale(.03,.03,.03)*unitsphere,blackIV);
draw(shift(2.2Z)*rotate(111.801409,Z)*rotate(90,X) 
                                    *arc(O,.4,0,-90,-90,90,CCW),blackIV+linewidth(.25));
draw(shift(.1694X+.0616Y+2.046Z)*scale(.03,.03,.03)*unitsphere,blackIV);
draw(Label(scale(.65)*"$\boldsymbol{u}$",position=EndPoint),
           (1.1,1.6,2.4)--(1.1+2.42,1.6+.88,2.4+2.2),PPblueblack+opacity(.7),Arrow3(5));
draw(Label(scale(.65)*"$\boldsymbol{u}$",position=EndPoint),
                             (0,0,0)--(2.42,.88,2.2),PPblueblack+opacity(.7),Arrow3(5));
draw(rotate(-21.801409,X)*rotate(90,Y)
                   *arc(O,1.5,0,90,-44.395569,0,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_1$",0.900127X+0.136410Y+0.341024Z,PPblueblack);
draw(rotate(47.726311,Y)*rotate(-90,X)
                  *arc(O,1.5,0,90,-74.940148,90,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_2$",0.375127X+0.661410Y+0.341024Z,PPblueblack);
draw(rotate(111.801409,Z)
                 *arc(O,1.5,0,-90,-49.490825,90,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_3$",0.375127X+0.136410Y+0.866024Z,PPblueblack);
\end{asy}
\end{verbatim}}


Na poslednom obrázku~\ref{obr09} je znázornená funkcia  dvojrozmerná funkcia $f(x,y)$, $(x,y)\in R^2$
definovaná vzťahom $f(x,y)=xy$ pre~$|x|\ge|y|$ a~vzťahom $f(x,y)=0$ pre~$|x|<|y|$.

{\scriptsize
\begin{verbatim}
\begin{asy}
import graph3;
texpreamble("\usepackage{amsmath}");unitsize(1.25cm);
currentprojection=orthographic(2.25,1.75,1);
triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), (xx)^2*sin(t.y)*cos(t.y));}
surface s1=surface(f,(0,-pi/4),(1.5,pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(s1,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
surface s2=surface(f,(0,3*pi/4),(1.5,5*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(s2,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
  triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), 0);}
surface n1=surface(f,(0,pi/4),(1.5,3*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(n1,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
surface n2=surface(f,(0,5*pi/4),(1.5,7*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(n2,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.6)*"$\boldsymbol{0}$",(0,0,0),.5X+.25Y-.5Z);
label(scale(.6)*"$f$",(-1.3,-.75,.975),-.5X+.25Z);
draw(Label(scale(.6)*"$-1$",position=EndPoint),(.05,0,-1)--(-.05,0,-1));
draw(Label(scale(.6)*"$1$",position=EndPoint),(.05,0,1)--(-.05,0,1));
draw(Label(scale(.6)*"$1$",position=EndPoint),(1,0,.05)--(1,0,-.05));
draw(Label(scale(.6)*"$-1$",position=EndPoint),(-1,0,.05)--(-1,0,-.05));
draw(Label(scale(.6)*"$1$",position=EndPoint),(0,1,.05)--(0,1,-.05));
draw(Label(scale(.6)*"$-1$",position=EndPoint),(0,-1,.05)--(0,-1,-.05));
draw(Label(scale(.65)*"$x$",position=EndPoint),(-1.75,0,0)--(1.75,0,0),Arrow3);
draw(Label(scale(.65)*"$y$",position=EndPoint),(0,-1.75,0)--(0,1.75,0),Arrow3);
draw(Label(scale(.65)*"$z$",position=EndPoint),(0,0,-1.25)--(0,0,1.75),Arrow3);
\end{asy}
\end{verbatim}}

\begin{figure}[!ht]
%\centering
\begin{minipage}[b]{0.31\linewidth}
%\centering
\begin{asy}
import graph3;
size(3cm,0);
//currentprojection=orthographic(2,2.5,1.5);
currentprojection=orthographic(2,2.5,2);

draw(box(O,(-.383616,1.180650,1.95)),blackII+linewidth(.25)+opacity(.5));
draw(shift(-.383616X)*scale(.05,.05,.05)*unitsphere,black);
draw(shift(1.180650Y)*scale(.05,.05,.05)*unitsphere,black);
draw(shift(1.95Z)*scale(.05,.05,.05)*unitsphere,black);
label(scale(.5)*"$x(t_0)$",(-.383616,0,0),Y,black);
label(scale(.5)*"$y(t_0)$",(0,1.180650,0),X,black);
label(scale(.5)*"$z(t_0)$",(0,0,1.95),X,black);

draw(Label(scale(.65)*"$x$",position=EndPoint),(-2,0,0)--(2,0,0),Arrow3);
draw(Label(scale(.65)*"$y$",position=EndPoint),(0,-2,0)--(0,2,0),Arrow3);
draw(Label(scale(.65)*"$z$",position=EndPoint),(0,0,-.25)--(0,0,4.2),Arrow3);

triple p(real t) { return (2*t*sin(2pi*t)/pi,2*t*cos(2pi*t)/pi,t); }
path3 pp=graph(p,0,2.95,operator ..);
draw(Label(scale(.65)*"$f$",position=EndPoint),pp,PPblueblack+1);
draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
draw(shift(-.383616X+1.180650Y+1.95Z)*scale(.075,.075,.075)*unitsphere,PPblueblack+1);
label(scale(.6)*"$f(t_0)$",(-.383616,1.180650,1.95),Y,PPblueblack+1);

triple d(real t) { return (-.383616+7.221514*t,1.180650+3.015794*t,1.95+t); }
path3 dd=graph(d,-.24,.24,operator ..);
draw(Label(scale(.65)*"$d$",position=BeginPoint),dd,PPoliveblack+1);

triple d0(real t) { return (-.383616+7.221514*t,1.180650+3.015794*t,0); }
path3 dd0=graph(d0,.24,-.24,operator ..);draw(dd0--dd--cycle,blackII+linewidth(.25));draw(dd0,blackII+.5);
\end{asy}
\caption{Špirála}
\label{obr07}
\end{minipage}%
%
%\hfill
%
\begin{minipage}[b]{0.31\linewidth}
%\centering
\begin{asy}
import graph3;
import labelpath3;
texpreamble("\usepackage{amsmath}");
unitsize(.64cm);
currentprojection=orthographic(2.5,2,1);

draw(shift(2.42X)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_1$",(2.2,0,0),-Z);
draw(shift(.88Y)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_2$",(0,.8,0),-Z);
draw(shift(2.2Z)*scale(.05,.05,.05)*unitsphere);label(scale(.5)*"$u_3$",(0,0,2),-Y+.5Z);

draw(Label(scale(.65)*"$x_1$",position=EndPoint),(-.25,0,0)--(3,0,0),Arrow3(5));
draw(Label(scale(.65)*"$x_2$",position=EndPoint),(0,-.25,0)--(0,2.5,0),Arrow3(5));
draw(Label(scale(.65)*"$x_3$",position=EndPoint),(0,0,-.25)--(0,0,3.5),Arrow3(5));

draw(scale(2.42,.88,2.2)*unitbox,blackIV+linewidth(.25));
draw((2.42,0,0)--(2.42,.88,2.2) ^^ (0,.88,0)--(2.42,.88,2.2) ^^ (0,0,2.2)--(2.42,.88,2.2),blackIV+linewidth(.25));

draw(shift(1.1X+1.6Y+2.4Z)*scale(.075,.075,.075)*unitsphere,PPblueblack);
label(scale(.65)*"$\boldsymbol{a}$",1.1X+1.6Y+2.4Z,1.1Y-Z,PPblueblack);
draw((1.1,1.6,2.4)--(2.7,1.6,2.4) ^^ (1.1,1.6,2.4)--(1.1,3.2,2.4) ^^ (1.1,1.6,2.4)--(1.1,1.6,4),blueV+linewidth(.25));
draw(shift(1.1X+1.6Y+2.4Z)*rotate(-21.801409,X)*rotate(90,Y)*arc(O,1.5,0,90,-44.395569,0,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_1$",2.000127X+1.736410Y+2.741024Z,blueV);
draw(shift(1.1X+1.6Y+2.4Z)*rotate(47.726311,Y)*rotate(-90,X)*arc(O,1.5,0,90,-74.940148,90,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_2$",1.475127X+2.261410Y+2.741024Z,blueV);
draw(shift(1.1X+1.6Y+2.4Z)*rotate(111.801409,Z)*arc(O,1.5,0,-90,-49.490825,90,CCW),blueV,Arrow3(4));
label(scale(.4)*"$\gamma_3$",1.475127X+1.736410Y+3.266024Z,blueV);

draw(shift(2.42X)*rotate(-21.801409,X)*arc(O,.4,0,90,-90,0,CCW),blackIV+linewidth(.25));
draw(shift(2.2506X+.0616Y+.154Z)*scale(.03,.03,.03)*unitsphere,blackIV);
draw(shift(.88Y)*rotate(47.726311,Y)*arc(O,.4,0,90,-90,90,CCW),blackIV+linewidth(.25));
draw(shift(.15125X+.715Y+.1375Z)*scale(.03,.03,.03)*unitsphere,blackIV);
draw(shift(2.2Z)*rotate(111.801409,Z)*rotate(90,X)*arc(O,.4,0,-90,-90,90,CCW),blackIV+linewidth(.25));
draw(shift(.1694X+.0616Y+2.046Z)*scale(.03,.03,.03)*unitsphere,blackIV);

draw(Label(scale(.65)*"$\boldsymbol{u}$",position=EndPoint),(1.1,1.6,2.4)--(1.1+2.42,1.6+.88,2.4+2.2),PPblueblack+opacity(.7),Arrow3(5));
draw(Label(scale(.65)*"$\boldsymbol{u}$",position=EndPoint),(0,0,0)--(2.42,.88,2.2),PPblueblack+opacity(.7),Arrow3(5));
draw(rotate(-21.801409,X)*rotate(90,Y)*arc(O,1.5,0,90,-44.395569,0,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_1$",0.900127X+0.136410Y+0.341024Z,PPblueblack);
draw(rotate(47.726311,Y)*rotate(-90,X)*arc(O,1.5,0,90,-74.940148,90,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_2$",0.375127X+0.661410Y+0.341024Z,PPblueblack);
draw(rotate(111.801409,Z)*arc(O,1.5,0,-90,-49.490825,90,CCW),PPblueblack+opacity(.7),Arrow3(4));
label(scale(.4)*"$\gamma_3$",0.375127X+0.136410Y+0.866024Z,PPblueblack);
\end{asy}
\caption{Vektory}
\label{obr08}
\end{minipage}%
%
\kern2mm
%
\begin{minipage}[b]{0.31\linewidth}
%\centering
\begin{asy}
import graph3;
texpreamble("\usepackage{amsmath}");
unitsize(1.25cm);
currentprojection=orthographic(2.25,1.75,1);

 //function: call the radial coordinate r=t.x and the angle phi=t.y
triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), (xx)^2*sin(t.y)*cos(t.y));}
surface s1=surface(f,(0,-pi/4),(1.5,pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(s1,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
surface s2=surface(f,(0,3*pi/4),(1.5,5*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(s2,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));

triple f(pair t) { real xx=t.x;
return ((xx)*cos(t.y), (xx)*sin(t.y), 0);}
surface n1=surface(f,(0,pi/4),(1.5,3*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(n1,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));
surface n2=surface(f,(0,5*pi/4),(1.5,7*pi/4),6,6,
         usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
         vsplinetype=Spline);
draw(n2,blueII+opacity(.5),meshpen=PPblueblackI+thick(),nolight,render(merge=true));

draw(scale(.05,.05,.05)*unitsphere,PPblueblack+1);
label(scale(.6)*"$\boldsymbol{0}$",(0,0,0),.5X+.25Y-.5Z);
label(scale(.6)*"$f$",(-1.3,-.75,.975),-.5X+.25Z);

draw(Label(scale(.6)*"$-1$",position=EndPoint),(.05,0,-1)--(-.05,0,-1));
draw(Label(scale(.6)*"$1$",position=EndPoint),(.05,0,1)--(-.05,0,1));
draw(Label(scale(.6)*"$1$",position=EndPoint),(1,0,.05)--(1,0,-.05));
draw(Label(scale(.6)*"$-1$",position=EndPoint),(-1,0,.05)--(-1,0,-.05));
draw(Label(scale(.6)*"$1$",position=EndPoint),(0,1,.05)--(0,1,-.05));
draw(Label(scale(.6)*"$-1$",position=EndPoint),(0,-1,.05)--(0,-1,-.05));

draw(Label(scale(.65)*"$x$",position=EndPoint),(-1.75,0,0)--(1.75,0,0),Arrow3);
draw(Label(scale(.65)*"$y$",position=EndPoint),(0,-1.75,0)--(0,1.75,0),Arrow3);
draw(Label(scale(.65)*"$z$",position=EndPoint),(0,0,-1.25)--(0,0,1.75),Arrow3);
\end{asy}
\caption{Graf funkcie}
\label{obr09}
\end{minipage}%
\end{figure}


\addcontentsline{toc}{section}{Záver}%
\section*{Záver}
Iná možnosť na kreslenie je použitie balíčka \malTikZ{} ({%
\selectlanguage{ngerman}%
T~ist kein Zeichenprogramm}%\selectlanguage{czech}
),
ktorý je veľmi účinný nástroj na kreslenie jednoduchých aj zložitejších obrázkov, grafov, schém, grafov funkcií\dots{} 
Jeho autorom je Till Tantau \cite{tikz}. Základným princípom práce s~týmto balíčkom sa zaoberal A.~Kozubík na OSSConf 2012
v~príspevku \uv{Naučím vás kresliť alebo predstavenie balíčka \malTikZ} \cite{alesko01}.
Balíček je štandartnou súčasťou každej inštalácie \TeX-u. Manuál a~mnoho užitočných informácií nájdeme na portáli CTAN
\href{https://www.ctan.org/pkg/pgf}{\url{https://www.ctan.org/pkg/pgf}}.

\addcontentsline{toc}{section}{Literatúra}%
\begin{thebibliography}{99}
\bibitem{blasko}
Blaško, R.: 
{\it Asymptote a \LaTeX},
Zborník príspevkov medzinárodnej konferencie OSSConf~2018 a~2019, 2.\,--\,4. júla~2018, Žilina, 
str.~7--14. ISBN~978-80-554-1627-4.

\bibitem{hammerlindl}
Hammerlindl, A., Bowman, J., Prince, T.: 
{\it Asymptote: The Vector \\Graphics Language},
\url{https://asymptote.sourceforge.io/}.

\bibitem{texbook} 
Knuth, D.\,E.: {\it The \TeX{}book}, 
Volume~A~of {\it Computers and Typesetting}, 
Addison\discretionary{-}{-}{-}Wesley
Publishing Company (1984), ISBN~0-201-13448-9.

\bibitem{alesko01}
Kozubík, A.: 
{\it Naučím vás kresliť alebo predstavenie balíčka \malTikZ},
Zborník príspevkov medzinárodnej konferencie OSSConf~2012, 2.\,--\,4.~júla~2012, Žilina, 
str.~91--96. ISBN~978-80-970457-2-2.

\bibitem{striz}
Stříž, P.:
{\it Jak jsem se skamarádil s \LaTeX ovým balíčkem \balicek{animate}},
Zborník príspevkov medzinárodnej konferencie OSSConf~2010, 1.\,--\,4.~júla~2010, Žilina, 
str.~177--184. ISBN 978-80-970457-0-8.

\bibitem{tikz}
Tantau, T.:
{\it \malTikZ{} \& PGF}, Manual for Version 3.1.3,
\url{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}.

\end{thebibliography}

