% Copyright 2007 by Mark Wibrow % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Free Documentation License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \section{Additional Mathematical Commands} \label{pgfmath-commands} Instead of parsing and evaluating complex expressions, you can also use the mathematical engine to evaluate a single mathematical operation. The macros used for many of these computations are listed above in Section~\ref{pgfmath-functions}. \pgfname{} also provides some additional commands which are shown below: \subsection{Basic arithmetic functions} \label{pgfmath-commands-basic} In addition to the commands described in Section~\ref{pgfmath-functions-basic}, the following command is provided: \begin{command}{\pgfmathreciprocal\marg{x}} Defines |\pgfmathresult| as $1\div\meta{x}$. This is provides greatest accuracy when \mvar{x} is small. \end{command} \subsection{Comparison and logical functions} In addition to the commands described in Section~\ref{pgfmath-functions-comparison}, the following command was provided by Christian Feuers\"anger: \begin{command}{\pgfmathapproxequalto\marg{x}\marg{y}} Defines |\pgfmathresult| 1.0 if $ \rvert \meta{x} - \meta{y} \lvert < 0.0001$, but 0.0 otherwise. As a side-effect, the global boolean |\ifpgfmathcomparison| will be set accordingly. \end{command} \subsection{Pseudo-Random Numbers} \label{pgfmath-random} In addition to the commands described in Section~\ref{pgfmath-functions-random}, the following commands are provided: \begin{command}{\pgfmathgeneratepseudorandomnumber} Defines |\pgfmathresult| as a pseudo-random integer between 1 and $2^{31}-1$. This uses a linear congruency generator, based on ideas due to Erich Janka. \end{command} \begin{command}{\pgfmathrandominteger\marg{macro}\marg{maximum}\marg{minimum}} This defines \meta{macro} as a pseudo-randomly generated integer from the range \meta{maximum} to \meta{minimum} (inclusive). \begin{codeexample}[] \begin{pgfpicture} \foreach \x in {1,...,50}{ \pgfmathrandominteger{\a}{1}{50} \pgfmathrandominteger{\b}{1}{50} \pgfpathcircle{\pgfpoint{+\a pt}{+\b pt}}{+2pt} \color{blue!40!white} \pgfsetstrokecolor{blue!80!black} \pgfusepath{stroke, fill} } \end{pgfpicture} \end{codeexample} \end{command} \begin{command}{\pgfmathdeclarerandomlist\marg{list name}\{\marg{item-1}\marg{item 2}...\}} This creates a list of items with the name \meta{list name}. \end{command} \begin{command}{\pgfmathrandomitem\marg{macro}\marg{list name}} Select an item from a random list \meta{list name}. The selected item is placed in \meta{macro}. \end{command} \begin{codeexample}[] \begin{pgfpicture} \pgfmathdeclarerandomlist{color}{{red}{blue}{green}{yellow}{white}} \foreach \a in {1,...,50}{ \pgfmathrandominteger{\x}{1}{85} \pgfmathrandominteger{\y}{1}{85} \pgfmathrandominteger{\r}{5}{10} \pgfmathrandomitem{\c}{color} \pgfpathcircle{\pgfpoint{+\x pt}{+\y pt}}{+\r pt} \color{\c!40!white} \pgfsetstrokecolor{\c!80!black} \pgfusepath{stroke, fill} } \end{pgfpicture} \end{codeexample} \begin{command}{\pgfmathsetseed\marg{integer}} Explicitly set seed for the pseudo-random number generator. By default it is set to the value of |\time|$\times$|\year|. \end{command} \subsection{Base Conversion} \label{pgfmath-bases} \pgfname{} provides limited support for conversion between \emph{representations} of numbers. Currently the numbers must be positive integers in the range $0$ to $2^{31}-1$, and the bases in the range $2$ to $36$. All digits representing numbers greater than 9 (in base ten), are alphabetic, but may be upper or lower case. In addition to the commands described in Section~\ref{pgfmath-functions-base}, the following commands are provided: \begin{command}{\pgfmathbasetodec\marg{macro}\marg{number}\marg{base}} Defines \meta{macro} as the result of converting \meta{number} from base \meta{base} to base 10. Alphabetic digits can be upper or lower case. \medskip{\def\medskip{} \begin{codeexample}[] \pgfmathbasetodec\mynumber{107f}{16} \mynumber \end{codeexample} \begin{codeexample}[] \pgfmathbasetodec\mynumber{33FC}{20} \mynumber \end{codeexample} }\medskip \end{command} \begin{command}{\pgfmathdectobase\marg{macro}\marg{number}\marg{base}} Defines \meta{macro} as the result of converting \meta{number} from base 10 to base \meta{base}. Any resulting alphabetic digits are in \emph{lower case}. \begin{codeexample}[] \pgfmathdectobase\mynumber{65535}{16} \mynumber \end{codeexample} \end{command} \begin{command}{\pgfmathdectoBase\marg{macro}\marg{number}\marg{base}} Defines \meta{macro} as the result of converting \meta{number} from base 10 to base \meta{base}. Any resulting alphabetic digits are in \emph{upper case}. \begin{codeexample}[] \pgfmathdectoBase\mynumber{65535}{16} \mynumber \end{codeexample} \end{command} \begin{command}{\pgfmathbasetobase\marg{macro}\marg{number}\marg{base-1}\marg{base-2}} Defines \meta{macro} as the result of converting \meta{number} from base \meta{base-1} to base \meta{base-2}. Alphabetic digits in \meta{number} can be upper or lower case, but any resulting alphabetic digits are in \emph{lower case}. \begin{codeexample}[] \pgfmathbasetobase\mynumber{11011011}{2}{16} \mynumber \end{codeexample} \end{command} \begin{command}{\pgfmathbasetoBase\marg{macro}\marg{number}\marg{base-1}\marg{base-2}} Defines \meta{macro} as the result of converting \meta{number} from base \meta{base-1} to base \meta{base-2}. Alphabetic digits in \meta{number} can be upper or lower case, but any resulting alphabetic digits are in \emph{upper case}. \begin{codeexample}[] \pgfmathbasetoBase\mynumber{121212}{3}{12} \mynumber \end{codeexample} \end{command} \begin{command}{\pgfmathsetbasenumberlength\marg{integer}} Set the number of digits in the result of a base conversion to \meta{integer}. If the result of a conversion has less digits than this number it is prefixed with zeros. \begin{codeexample}[] \pgfmathsetbasenumberlength{8} \pgfmathdectobase\mynumber{15}{2} \mynumber \end{codeexample} \end{command}