You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.3 KiB
123 lines
3.3 KiB
% 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 Public License.
|
|
%
|
|
% See the file doc/generic/pgf/licenses/LICENSE for more details.
|
|
|
|
% This file defines the mathematical functions and operators.
|
|
%
|
|
% Version 1.414213 29/9/2007
|
|
|
|
% round function. Uses asymmetric half-up rounding.
|
|
%
|
|
\pgfmathdeclarefunction{round}{1}{%
|
|
\begingroup%
|
|
\expandafter\pgfmath@x#1pt\relax%
|
|
\afterassignment\pgfmath@xa%
|
|
\expandafter\c@pgfmath@counta\the\pgfmath@x\relax%
|
|
\pgfmath@xb\pgfmath@x%
|
|
\ifdim\pgfmath@xb<0pt\relax%
|
|
\ifdim\pgfmath@xa<0.5pt\relax%
|
|
\else%
|
|
\advance\c@pgfmath@counta-1\relax%
|
|
\fi%
|
|
\else%
|
|
\ifdim\pgfmath@xa<0.5pt\relax%
|
|
\else%
|
|
\advance\c@pgfmath@counta1\relax%
|
|
\fi%
|
|
\fi%
|
|
\pgfmath@returnone\the\c@pgfmath@counta pt%
|
|
\endgroup%
|
|
}%
|
|
|
|
% floor function.
|
|
%
|
|
\pgfmathdeclarefunction{floor}{1}{%
|
|
\begingroup%
|
|
\expandafter\pgfmath@x#1pt\relax%
|
|
\afterassignment\pgfmathfloor@collect@remainder%
|
|
\expandafter\c@pgfmath@counta\the\pgfmath@x\pgfmath@%
|
|
\expandafter\pgfmath@x#1pt\relax%
|
|
\ifdim\pgfmath@x<0pt\relax%
|
|
\ifdim\pgfmathfloor@remainder>0pt
|
|
\advance\c@pgfmath@counta by -1\relax%
|
|
\else
|
|
% ok, we stripped only '0'.
|
|
\fi
|
|
\fi%
|
|
\pgfmath@x\c@pgfmath@counta pt\relax%
|
|
\pgfmath@returnone\pgfmath@x%
|
|
\endgroup%
|
|
}%
|
|
|
|
\def\pgfmathfloor@collect@remainder#1\pgfmath@{%
|
|
\def\pgfmathfloor@remainder{#1}%
|
|
\ifx\pgfmathfloor@remainder\pgfutil@empty
|
|
\def\pgfmathfloor@remainder{0}%
|
|
\fi
|
|
}%
|
|
|
|
% ceil function.
|
|
%
|
|
\pgfmathdeclarefunction{ceil}{1}{%
|
|
\begingroup%
|
|
\expandafter\pgfmath@x#1pt\relax%
|
|
\afterassignment\pgfmath@gobbletilpgfmath@%
|
|
\expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@%
|
|
\pgfmath@y\pgfmath@x%
|
|
\advance\pgfmath@y-\c@pgfmath@counta pt\relax%
|
|
\pgfmath@x\c@pgfmath@counta pt\relax%
|
|
\ifdim\pgfmath@y>0pt\relax%
|
|
\advance\pgfmath@x1pt\relax%
|
|
\fi%
|
|
\pgfmath@returnone\pgfmath@x%
|
|
\endgroup%
|
|
}%
|
|
|
|
% int function
|
|
%
|
|
\pgfmathdeclarefunction{int}{1}{%
|
|
\begingroup%
|
|
\expandafter\pgfmathint@@#1.\pgfmath@stop
|
|
\pgfmath@smuggleone\pgfmathresult%
|
|
\endgroup}
|
|
|
|
\def\pgfmathint@@#1.#2\pgfmath@stop{%
|
|
\def\pgfmath@temp{#1}%
|
|
\ifx\pgfmath@temp\pgfmath@empty%
|
|
\def\pgfmathresult{0}%
|
|
\else%
|
|
\pgfmath@in@{#1}{+-+0-0}%
|
|
\ifpgfmath@in@
|
|
\def\pgfmathresult{0}%
|
|
\else%
|
|
\def\pgfmathresult{#1}%
|
|
\fi%
|
|
\fi}
|
|
|
|
% frac function.
|
|
%
|
|
\pgfmathdeclarefunction{frac}{1}{%
|
|
\begingroup%
|
|
\expandafter\pgfmathfrac@@#1.\pgfmath@stop%
|
|
\pgfmath@smuggleone\pgfmathresult%
|
|
\endgroup}
|
|
|
|
\def\pgfmathfrac@@#1.{%
|
|
\pgfmath@ifnextchar\pgfmath@stop{\def\pgfmathresult{0.0}\pgfmath@gobbleone}{\pgfmathfrac@@@}%
|
|
}
|
|
\def\pgfmathfrac@@@#1.\pgfmath@stop{\def\pgfmathresult{0.#1}}
|
|
|
|
% real function.
|
|
%
|
|
\pgfmathdeclarefunction{real}{1}{%
|
|
\begingroup%
|
|
\pgfmath@x=#1pt\relax%
|
|
\edef\pgfmathresult{\pgfmath@tonumber{\pgfmath@x}}%
|
|
\pgfmath@smuggleone\pgfmathresult%
|
|
\endgroup%
|
|
}
|
|
|