\ProvidesPackage{pgf}[2004/04/07 ver 0.61] % Copyright 2003 by Till Tantau . % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt. \newcount\pgf@objectcount \ifx\pdfoutput\undefined \RequirePackage{epsfig} \fi \RequirePackage[override]{xcolor} \RequirePackage{keyval} \DeclareOption{pdf} { % Driver commands for pdf \ifx\pdfximage\@undefined% less than version 14 \let\pdfxform\pdfform \let\pdflastxform\pdflastform \let\pdfrefxform\pdfrefform \fi \def\pgfsys@lineto#1#2{\pgf@pdf{#1 #2 l}} \def\pgfsys@moveto#1#2{\pgf@pdf{#1 #2 m}} \def\pgfsys@closepath{\pgf@pdf{h}} \def\pgfsys@path{}% no action! \def\pgfsys@stroke{\pgf@pdf{S}} \def\pgfsys@closestroke{\pgf@pdf{s}} \def\pgfsys@fill{\pgf@pdf{f}} \def\pgfsys@fillstroke{\pgf@pdf{B}} \def\pgfsys@clip{\pgf@pdf{W n}} \def\pgfsys@eoclip{\pgf@pdf{W* n}} \def\pgfsys@strokeclip{\pgf@pdf{W S}} \def\pgfsys@closestrokeclip{\pgf@pdf{W s}} \def\pgfsys@fillclip{\pgf@pdf{W f}} \def\pgfsys@fillstrokeclip{\pgf@pdf{W B}} \def\pgfsys@discardpath{\pgf@pdf{n}} \def\pgfsys@translate#1#2{\pgf@pdf{1 0 0 1 #1 #2 cm}} \def\pgfsys@scale#1#2{\pgf@pdf{#1 0 0 #2 0 0 cm}} \def\pgfsys@transform#1#2#3#4#5#6{\pgf@pdf{#1 #2 #3 #4 #5 #6 cm}} \def\pgfsys@openscope{\pgf@pdf{q}} \def\pgfsys@closescope{\pgf@pdf{Q}} \def\pgfsys@starthbox{\pgf@pdf{q}} \def\pgfsys@endhbox{\pgf@pdf{Q}} \def\pgfsys@openpicture{\pgf@pdf{q}} \def\pgfsys@closepicture{\pgf@pdf{n Q}} \def\pgfsys@setdash#1#2{\pgf@pdf{[#1] #2 d}} \def\pgfsys@setlinewidth#1{\pgf@pdf{#1 w}} \def\pgfsys@setmiterlimit#1{\pgf@pdf{#1 M}} \def\pgfsys@bezier#1#2#3#4#5#6{\pgf@pdf{#1 #2 #3 #4 #5 #6 c}} \def\pgfsys@rect#1#2#3#4{\pgf@pdf{#1 #2 #3 #4 re}} \def\pgfsys@buttcap{\pgf@pdf{0 J}} \def\pgfsys@roundcap{\pgf@pdf{1 J}} \def\pgfsys@rectcap{\pgf@pdf{2 J}} \def\pgfsys@miterjoin{\pgf@pdf{0 j}} \def\pgfsys@roundjoin{\pgf@pdf{1 j}} \def\pgfsys@beveljoin{\pgf@pdf{2 j}} \def\pgfsys@begininvisible{\pgf@pdf{1 0 0 1 2000 2000 cm}} \def\pgfsys@endinvisible{\pgf@pdf{1 0 0 1 -2000 -2000 cm}} % xform-free version \def\pgfsys@defobject#1#2#3#4{% \pgf@protocol{#4}% \expandafter\xdef\csname#1\endcsname{\pgf@prot\space}} \def\pgfsys@useobject#1#2{% \pgf@protocol{#2}% \pgf@pdf{\pgf@prot}% \pgf@pdf{\csname#1\endcsname}} % xform version (crashes ghostview) %\def\pgfsys@defobject#1#2#3#4{% % \pgf@process{#2} % \setbox\pgfobjectbox\hbox{\raise-\pgf@y\hbox{\hskip-\pgf@x\relax#4}} % \pgf@process{#3} % \pgf@xa=\pgf@x % \pgf@ya=\pgf@y % \pgf@process{#2} % \advance\pgf@xa by-\pgf@x % \advance\pgf@ya by-\pgf@y % \wd\pgfobjectbox=\pgf@xa % \dp\pgfobjectbox=0pt % \ht\pgfobjectbox=\pgf@ya % \pdfxform\pgfobjectbox % \expandafter\xdef\csname#1\endcsname{\the\pdflastxform} % \expandafter\xdef\csname pgf@trans#1\endcsname % {{\pgfget x}{\pgfget y}}} %\def\pgfsys@useobject#1#2{% % \setbox\pgfobjectbox\hbox{\pdfrefxform \csname#1\endcsname}% % \dp\pgfobjectbox=0pt% % \ht\pgfobjectbox=0pt% % \wd\pgfobjectbox=0pt% % \pgfsys@discardpath% % \pgfsys@openscope% % #2% % \edef\pgf@temp{{1}{0}{0}{1}\csname pgf@trans#1\endcsname}% % \expandafter\pgfsys@transform\pgf@temp% % \box\pgfobjectbox% % \pgfsys@closescope} \def\pgfsys@imagesuffixlist{pdf:jpg:png} \def\pgfsys@defineimage{% width, height, page number \ifx\pgf@imagewidth\@empty\else\edef\pgf@imagewidth{ width \pgf@imagewidth }\fi% \ifx\pgf@imageheight\@empty\else\edef\pgf@imageheight{ height \pgf@imageheight }\fi% \ifx\pgf@imagepage\@empty\else\edef\pgf@imagepage{ page \pgf@imagepage }\fi% \ifx\pdfximage\@undefined% old version of pdflatex \ifx\pgf@imagepage\@empty\else% \ClassWarning{beamer}{Page selection not supported. Ignoring page selection}% \fi% \setbox\pgf@tempbox=\hbox{% \pdfimage \pgf@imageheight \pgf@imagewidth {\pgf@filename}}% \pdfform\pgf@tempbox% \edef\pgf@image{\noexpand\pdfrefform\the\pdflastform}% \else% new version {\pdfximage \pgf@imageheight \pgf@imagewidth attr {\pgf@imageinterpolate\space\pgf@imagemask} \pgf@imagepage {\pgf@filename}}% \edef\pgf@image{\noexpand\pdfrefximage\the\pdflastximage}% \fi }% \def\pgfsys@definemask{% \ifx\pgf@maskmatte\@empty% \else% \edef\pgf@maskmatte{/Matte [\pgf@maskmatte]}% \fi% \edef\pgf@attr{{\pgf@maskmatte\space /Decode [1 0]}}% \immediate\pdfximage attr \pgf@attr {\pgf@filename}% \edef\pgf@mask{\the\pdflastximage}% } \PassOptionsToPackage{pdf}{pgfshade} } \DeclareOption{postscript} { % Driver commands for postscript \def\pgfsys@lineto#1#2{\pgf@ps{#1 #2 lineto}} \def\pgfsys@moveto#1#2{\pgf@ps{#1 #2 a}} \def\pgfsys@closepath{\pgf@ps{closepath}} \def\pgfsys@path{}% no action! \def\pgfsys@stroke{\pgf@ps{stroke}} \def\pgfsys@closestroke{\pgf@ps{closepath stroke}} \def\pgfsys@fill{\pgf@ps{fill}} \def\pgfsys@fillstroke{\pgf@ps{gsave fill grestore stroke}} \def\pgfsys@clip{\pgf@ps{pgfl}} \def\pgfsys@eoclip{\pgf@ps{eoclip newpath}} \def\pgfsys@strokeclip{\pgf@ps{gsave stroke grestore clip newpath}} \def\pgfsys@closestrokeclip{\pgf@ps{closepath gsave stroke grestore clip newpath}} \def\pgfsys@fillclip{\pgf@ps{gsave fill grestore clip newpath}} \def\pgfsys@fillstrokeclip{\pgf@ps{gsave fill grestore gsave stroke grestore clip newpath}} \def\pgfsys@discardpath{\pgf@ps{newpath}} \def\pgfsys@translate#1#2{\pgf@ps{#1 #2 translate}} \def\pgfsys@scale#1#2{\pgf@ps{#1 #2 scale}} \def\pgfsys@transform#1#2#3#4#5#6{\pgf@ps{[#1 #2 #3 #4 #5 #6] concat}} \def\pgfsys@openscope{\pgf@ps{gsave}} \def\pgfsys@closescope{\pgf@ps{grestore}} \def\pgfsys@openpicture{\special{ps: }% \special{ps::[begin]}\pgf@ps{pgfo}} \def\pgfsys@closepicture{\pgf@ps{pgfc}\special{ps::[end]}} \def\pgfsys@starthbox{\pgf@ps{pgfs}\special{ps::[end]}} \def\pgfsys@endhbox{\special{ps::[begin]}\pgf@ps{pgfr}} \def\pgfsys@setdash#1#2{\pgf@ps{[#1] #2 setdash}} \def\pgfsys@setlinewidth#1{\pgf@ps{#1 pgfw}} \def\pgfsys@setmiterlimit#1{\pgf@ps{#1 setmiterlimit}} \def\pgfsys@bezier#1#2#3#4#5#6{\pgf@ps{#1 #2 #3 #4 #5 #6 curveto}} \def\pgfsys@rect#1#2#3#4{\pgf@ps{#4 #3 #1 #2 pgfe}} \def\pgfsys@buttcap{\pgf@ps{0 setlinecap}} \def\pgfsys@roundcap{\pgf@ps{1 setlinecap}} \def\pgfsys@rectcap{\pgf@ps{2 setlinecap}} \def\pgfsys@miterjoin{\pgf@ps{0 setlinejoin}} \def\pgfsys@roundjoin{\pgf@ps{1 setlinejoin}} \def\pgfsys@beveljoin{\pgf@ps{2 setlinejoin}} \def\pgfsys@begininvisible{\special{ps::[begin]}% \pgf@ps{gsave nulldevice}\special{ps::[end]}} \def\pgfsys@endinvisible{\special{ps::[begin]}\pgf@ps{grestore}\special{ps::[end]}} \def\pgfsys@defobject#1#2#3#4{% \advance\pgf@objectcount by 1 \expandafter\xdef\csname#1\endcsname{\the\pgf@objectcount} \pgf@protocol{#4} \special{! /pgf\csname#1\endcsname{gsave exec \pgf@prot\space grestore} bind def}} \def\pgfsys@useobject#1#2{% \pgf@protocol{#2}% \pgf@ps{{\pgf@prot} pgf\csname#1\endcsname}} \def\pgfsys@imagesuffixlist{epsi:eps:ps} \def\pgfsys@defineimage{% \ifx\pgf@imagewidth\@empty\else\edef\pgf@imagewidth{width=\pgf@imagewidth,}\fi% \ifx\pgf@imageheight\@empty\else\edef\pgf@imageheight{height=\pgf@imageheight,}\fi% \ifx\pgf@imagepage\@empty\else% \ClassWarning{beamer}{Page selection not supported. Ignoring page selection}% \fi% \edef\pgf@image{\noexpand\epsfig{\pgf@imageheight\pgf@imagewidth file=\pgf@filename}}% } \def\pgfsys@definemask{}% not supported. % Always present specials. \special{! /pgfl{clip newpath}B% clipping /pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}B% rectangle /pgfw{setlinewidth}B% setlinewidth /pgfs{save 72 Resolution div 72 VResolution div neg scale pgfx neg pgfy neg translate}B% save /pgfr{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put restore /delta globaldict /pgfdelta get def}B %restore userdict begin% /pgfo{/pgfx currentpoint /pgfy exch def def @beginspecial}B %open /pgfc{newpath globaldict /pgfdelta /delta where {pop delta} {0} ifelse put @endspecial /delta globaldict /pgfdelta get def}B %close end} \PassOptionsToPackage{postscript}{pgfshade} } \ifx\pdfoutput\undefined \newcount\pdfoutput \fi \ifcase\pdfoutput \ExecuteOptions{postscript} % default if no pdf \else \ExecuteOptions{pdf} % default if pdf \fi \newif\ifpgf@draftmode \pgf@draftmodefalse \DeclareOption{draft}{\pgf@draftmodetrue} \ProcessOptions % Transperency test: %\pdfpageresources{/ExtGState << /Semi << /Type /ExtGState /CA 0.1 /ca 0.1 >> >>} %\pdfliteral{q /Semi gs 10 w 0 0 m 100 100 l S 100 0 m 0 100 l S Q} %\immediate\pdfximage attr {/Matte [1 1 1] /Decode [1 0]} {g4.smask.jpg} %\pdfximage height 8cm attr {/Interpolate true /SMask \the\pdflastximage\space 0 R} {g4.jpg} %\hskip1cm\pdfrefximage\pdflastximage % Globals \newdimen\pgfex % will be equal to 1ex \newdimen\pgfem % will be equal to 1em \newdimen\pgf@linewidth \newbox\pgfpic \newbox\pgf@hbox \newbox\pgf@tempbox \newdimen\pgf@aax % Start of first line \newdimen\pgf@aay \newdimen\pgf@abx % End of first line \newdimen\pgf@aby \newdimen\pgf@bax % Start of last line \newdimen\pgf@bay \newdimen\pgf@bbx % End of last line \newdimen\pgf@bby \def\pgf@process#1{{#1\global\pgf@x=\pgf@x\global\pgf@y=\pgf@y}} % Internal locals values \newdimen\pgf@x \newdimen\pgf@y \newdimen\pgf@xa \newdimen\pgf@ya \newdimen\pgf@xb \newdimen\pgf@yb \newdimen\pgf@xc \newdimen\pgf@yc % Internal conversion functions { \catcode`\p=12\catcode`\t=12 \gdef\@gf@ge@#1pt{#1} } \def\pgfget#1{\expandafter\@gf@ge@\the\csname pgf@#1\endcsname}%\space} \def\pgf@bpcorr#1{#1=0.99626401#1}% \def\pgf@pdf#1{{\edef\a{{#1}}\pdfliteral\a}} \def\pgf@ps#1{{\edef\a{{ps:: #1}}\special\a}} \def\pgf@toprotocol#1{\xdef\pgf@prot{\pgf@prot#1\space}} \def\pgf@protocol#1{\xdef\pgf@prot{}% {\let\pgf@pdf=\pgf@toprotocol% \let\pgf@ps=\pgf@toprotocol% #1}} % Internal definition function \def\pgfdef#1{% \edef#1{\noexpand\@ifnextchar[{\expandafter\noexpand\csname\string#1@\endcsname}{\expandafter\noexpand\csname\string#1@\endcsname[]}} \expandafter\def\csname\string#1@\endcsname} % Return a point % % #1 = x-coordinate of the point % #2 = y-coordinate of the point % % x = #1 % y = #2 % % Example: % % \pgfmoveto{\pgfpoint{2pt}{3cm}} \def\pgfpoint#1#2{\pgf@x=#1\relax\pgf@bpcorr{\pgf@x}% \pgf@y=#2\relax\pgf@bpcorr{\pgf@y}\ignorespaces} % Return the origin. % % x = 0 % y = 0 % % Example: % % \pgfmoveto{\pgforigin} \def\pgforigin{\pgfpoint{0pt}{0pt}\ignorespaces} % Return a point that is #2 in a direction #1 of the origin. % % #1 = a direction (n,s,e,w,ne,nw,se,sw) % #2 = a distance from the origin % % Example: % % \pgfmoveto{\pgfpolar{\pgfdirection{n}}{1cm}} \def\pgfdirection#1{\csname pgf@direction#1\endcsname} \def\pgf@directionn{90} \def\pgf@directionnorth{90} \def\pgf@directionabove{90} \def\pgf@directions{270} \def\pgf@directionsouth{270} \def\pgf@directionbelow{270} \def\pgf@directionw{180} \def\pgf@directionwest{180} \def\pgf@directionleft{180} \def\pgf@directione{0} \def\pgf@directioneast{0} \def\pgf@directionright{0} \def\pgf@directionne{45} \def\pgf@directionse{315} \def\pgf@directionnw{135} \def\pgf@directionsw{-135} % Return the difference vector of two points. % % #1 = start of vector % #2 = end of vector % % x = x-component of difference % y = y-component of difference % % Example: % % \pgfmoveto{\pgfdiff{\pgfxy(1,1)}{\pgfxy(2,3)}} \def\pgfdiff#1#2{% \pgf@process{#1}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#2}% \advance\pgf@x by-\pgf@xa\relax% \advance\pgf@y by-\pgf@ya\relax\ignorespaces} % Add two vectors. % % #1 = first vector % #2 = second vector % % x = x-component of addition % y = y-component of addition % % Example: % % \pgfmoveto{\pgfrelative{\pgfxy(0,1)}{\pgfxy(2,3)}} \def\pgfrelative#1#2{% \pgf@process{#1}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#2}% \advance\pgf@x by\pgf@xa\relax% \advance\pgf@y by\pgf@ya\relax\ignorespaces} % Return a fraction of #1 of the way from #2 to #3. % % #1 = a fraction % #2 = start point % #3 = end point % % x = x-component of #1*start + (1-#1)*end % y = y-component of #1*start + (1-#1)*end % % Example: % % % Middle of (1,1) and (2,3) % \pgfmoveto{\pgfpartway{0.5}{\pgfxy(1,1)}{\pgfxy(2,3)}} \def\pgfpartway#1#2#3{% \pgf@process{#3}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#2}% \advance\pgf@xa by-\pgf@x\relax% \advance\pgf@ya by-\pgf@y\relax% \advance\pgf@x by #1\pgf@xa\relax% \advance\pgf@y by #1\pgf@ya\relax% \ignorespaces} % Move point #2 #1 many units in the direction of #3. % % #1 = a distance % #2 = start point % #3 = end point % % x = x-component of start + #1*(normalise(end-start)) % y = y-component of start + #1*(normalise(end-start)) % % Example: % % % \pgfline{\pgfbackoff{2pt}{\pgfxy(1,1)}{\pgfxy(2,3)}} % {\pgfbackoff{3pt}{\pgfxy(2,3)}{\pgfxy(1,1)}} \def\pgfbackoff#1#2#3{% \pgf@process{#2}% \pgf@xb=\pgf@x\relax% xb/yb = start point \pgf@yb=\pgf@y\relax% \pgf@process{#3}% \advance\pgf@x by-\pgf@xb\relax% \advance\pgf@y by-\pgf@yb\relax% \pgfnormalise{}% x/y = normalised vector \pgf@xa=#1\relax% \pgf@ya=#1\relax% \pgf@mult{\pgf@xa}{\pgfget x}{\pgf@xa}% \pgf@mult{\pgf@ya}{\pgfget y}{\pgf@ya}% \pgf@x=\pgf@xb\relax% \pgf@y=\pgf@yb\relax% \advance\pgf@x by\pgf@xa\relax% \advance\pgf@y by\pgf@ya\relax% \ignorespaces} % Calculate a position for a label above a line. % % #1 = fraction of line where to put the label, where 0 means start, % 1 means end, and for example 0.5 means the middle. % #2 = start of line % #3 = end of line % #4 = vertical offset % % Example: % % \pgfputat{\pgflabel{.5}{\pgfxy(0,0)}{\pgfxy(3,2)}{4pt}}{\pgfbox[center,base]{Hi!}} \def\pgflabel#1#2#3#4{% % First, calculate base point \pgfpartway{#1}{#2}{#3}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \pgf@process{#2}% \pgf@xa=\pgf@x% xb/yb = start point \pgf@ya=\pgf@y% \pgf@process{#3}% \advance\pgf@x by-\pgf@xa% \advance\pgf@y by-\pgf@ya% \pgfnormalise{}% x/y = normalised vector \pgf@xa=-#4\relax% \pgf@ya=#4\relax% \pgf@mult{\pgf@xa}{\pgfget y}{\pgf@xa}% \pgf@mult{\pgf@ya}{\pgfget x}{\pgf@ya}% \pgf@x=\pgf@xb\relax% \pgf@y=\pgf@yb\relax% \advance\pgf@x by\pgf@xa\relax% \advance\pgf@y by\pgf@ya\relax% \ignorespaces} % Place a label above a line in a rotated way. % % #1 = fraction of line where to put the label, where 0 means start, % 1 means end, and for example 0.5 means the middle. % #2 = start of line % #3 = end of line % #4 = vertical offset % #5 = stuff to put % % Example: % % \pgfputlabelrotated{.5}{\pgfxy(0,0)}{\pgfxy(3,2)}{4pt}{\pgfbox[center,base]{Hi!}} \def\pgfputlabelrotated#1#2#3#4#5{% \pgflabel{#1}{#2}{#3}{#4}% \pgfputat{}{% \pgf@process{#2}% \pgf@xa=\pgf@x% xb/yb = start point \pgf@ya=\pgf@y% \pgf@process{#3}% \advance\pgf@x by-\pgf@xa% \advance\pgf@y by-\pgf@ya% \pgfnormalise{}% x/y = normalised vector \pgf@ya=-\pgf@y% \pgfsys@transform{\pgfget x}{\pgfget y}{\pgfget{ya}}{\pgfget x}{0}{0}% #5}\ignorespaces} % Scopes % Pgf scope environment. All changes of the graphic state are local to % the scope. % % Example: % % \begin{pgfscope} % \pgfsetlinewidth{3pt} % \pgfline{\pgfxy(0,0)}{\pgfxy(3,3)} % \end{pgfscope} \def\pgfscope{\pgfsys@openscope\ignorespaces} \def\endpgfscope{\pgfsys@closescope\ignorespacesafterend\ignorespaces} % Create a box that can contain normal TeX text. % % #1 = ``left'', ``center'' or ``right'' (horizontal align) % #2 = ``base'', ``bottom'', ``center'' or ``top'' (vertical align) % #3 = TeX text. % % Example: % % \pgfputat{\pgforigin}{\pgfbox[center,center]{Hello World!}} \long\def\pgfbox[#1,#2]#3{% \setbox\pgf@hbox=\hbox{\selectfont#3}% \csname pgf@halign#1\endcsname% \csname pgf@valign#2\endcsname% \wd\pgf@hbox=0pt% \ht\pgf@hbox=0pt% \dp\pgf@hbox=0pt% \pgfsys@starthbox% \box\pgf@hbox% \pgfsys@endhbox% \ignorespaces} % Internal shifters \def\pgf@halignleft{}% do nothing \def\pgf@haligncenter{\setbox\pgf@hbox=\hbox{\hskip-.5\wd\pgf@hbox\box\pgf@hbox}} \def\pgf@halignright{\setbox\pgf@hbox=\hbox{\hskip-\wd\pgf@hbox\box\pgf@hbox}} \def\pgf@valignbase{}% do nothing \def\pgf@valignbottom{\setbox\pgf@hbox=\hbox{\raise\dp\pgf@hbox\box\pgf@hbox}} \def\pgf@valigncenter{\setbox\pgf@hbox=\hbox{\raise.5\dp\pgf@hbox\hbox{\raise-.5\ht\pgf@hbox\box\pgf@hbox}}} \def\pgf@valigntop{\setbox\pgf@hbox=\hbox{\raise-\ht\pgf@hbox\box\pgf@hbox}} % Set the line width to #1. % % #1 = new line width. % % Example: % % \pgfsetlinewidth{3pt} \def\pgfsetlinewidth#1{% \pgf@linewidth=#1\pgf@bpcorr{\pgf@linewidth}% \pgfsys@setlinewidth{\pgfget{linewidth}}% \ignorespaces} % Set the miter limit to #1. % % #1 = new miter limit. % % Example: % % \pgfsetmiterlimit{3pt} \def\pgfsetmiterlimit#1{% \pgf@x=#1\relax\pgf@bpcorr{\pgf@x}% \pgfsys@setmiterlimit{\pgfget x}% \ignorespaces} % Set the dash pattern to #1 with phase #2/ % % #1 = a row of numbers of length of ``on'' and ``off'' points. % #2 = a phase % % Example: % % \pgfsetdash{} {0pt} % solid line % \pgfsetdash{{.1cm}} {0pt} % long dashes % \pgfsetdash{{1pt}{1ex}}{0pt} % dotted \def\pgfsetdash#1#2{% \def\pgf@temp{}% \def\pgf@next{\pgf@strip}% \pgf@strip#1{pgf@stop}% \pgf@x=#2\relax\pgf@bpcorr{\pgf@x}% \pgfsys@setdash{\pgf@temp}{\pgfget x}% \ignorespaces} \def\pgf@strip#1{% \expandafter\ifx\csname#1\endcsname\pgf@stop% \def\pgf@next{}% \else% \pgf@x=#1\relax\pgf@bpcorr{\pgf@x}%% \edef\pgf@temp{\pgf@temp\space\pgfget x}% \fi\pgf@next} \def\pgf@stop{} % Set a butt line cap. % % Example: % % \pgfsetbuttcap \def\pgfsetbuttcap{\pgfsys@buttcap\ignorespaces} % Set a round line cap. % % Example: % % \pgfsetroundcap \def\pgfsetroundcap{\pgfsys@roundcap\ignorespaces} % Set a rectangular line cap. % % Example: % % \pgfsetrectcap \def\pgfsetrectcap{\pgfsys@rectcap\ignorespaces} % Set a miter line join. % % Example: % % \pgfsetmiterjoin \def\pgfsetmiterjoin{\pgfsys@miterjoin\ignorespaces} % Set a bevel line join. % % Example: % % \pgfsetbeveljoin \def\pgfsetbeveljoin{\pgfsys@beveljoin\ignorespaces} % Set a round line join. % % Example: % % \pgfsetroundjoin \def\pgfsetroundjoin{\pgfsys@roundjoin\ignorespaces} % Basic drawing % Move current point to #1. % % #1 = new current point % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgfstroke \def\pgfmoveto#1{% \pgf@process{#1}% \pgfsys@moveto{\pgfget x}{\pgfget y}% \pgf@aax=\pgf@x% \pgf@aay=\pgf@y% \pgf@bbx=\pgf@x% \pgf@bby=\pgf@y\ignorespaces} % Append a line from the current point to #1 to the current path. % % #1 = end of line % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgfstroke \def\pgflineto#1{% \pgf@process{#1}% \pgfsys@lineto{\pgfget x}{\pgfget y}% \ifnum\pgf@aax=\pgf@bbx\ifnum\pgf@aay=\pgf@bby% First lineto \pgf@abx=\pgf@x% \pgf@aby=\pgf@y \fi\fi% \pgf@bax=\pgf@bbx% \pgf@bay=\pgf@bby% \pgf@bbx=\pgf@x% \pgf@bby=\pgf@y% \ignorespaces} % Append a bezier spline from the current point to #3 with control % points #1 and #2 to the current path. % % #1 = first control point % #2 = second control point % #3 = end point % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgfbezier{\pgfxy(0,1)}{\pgfxy(1,1)}{\pgfxy(1,2)} % \pgfstroke \def\pgfcurveto{\pgfbezier} \def\pgfbezier#1#2#3{% \pgf@process{#3}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \pgf@process{#2}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#1}% \pgfsys@bezier{\pgfget x}{\pgfget y}{\pgfget{xa}}{\pgfget{ya}}% {\pgfget{xb}}{\pgfget{yb}}% \pgf@abx=\pgf@x% \pgf@aby=\pgf@y% \pgf@bax=\pgf@xa% \pgf@bay=\pgf@ya% \pgf@bbx=\pgf@xb% \pgf@bby=\pgf@yb\ignorespaces} % Close the current path. % % Example: % % % Draws two triangles % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfclosepath % \pgfmoveto{\pgfxy(2,0)} % \pgflineto{\pgfxy(2,1)} % \pgflineto{\pgfxy(3,0)} % \pgfclosepath % \pgfstroke \def\pgfclosepath{\pgfsys@closepath\ignorespaces} % This hook will be executed after something non-closed has been stroked. % % Example: % % \def\pgfstrokehook{\pgfcircle[fill]{\pgforigin}{4pt}} \def\pgfstrokehook{} % Stroke the current path. % % Example: % % % Draws two lines. % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfstroke \def\pgfstroke{\pgfsys@stroke\begingroup\pgfstrokehook\endgroup\ignorespaces} % Close the current path and then stroke it. % % Example: % % % Draw a closed triangle % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfclosestroke \def\pgfclosestroke{\pgfsys@closestroke\ignorespaces} % Fill the current path. % % Example: % % \pgfzerocircle{3cm} % \pgffill \def\pgffill{\pgfsys@fill\ignorespaces} % Fill and stroke the current path. % % Example: % % \pgfzerocircle{3cm} % \pgffillstroke \def\pgffillstroke{\pgfsys@fillstroke\ignorespaces} % Intersection the current path and the clipping path to form a new % clipping path % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfclosepath % \pgfclip \def\pgfclip{\pgfsys@clip\ignorespaces} % Stroke the current path and use it for clipping. % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfclosepath % \pgfstrokeclip \def\pgfstrokeclip{\pgfsys@strokeclip\ignorespaces} % Close the current path, stroke it, and use it for clipping. % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgfclosestrokeclip \def\pgfclosestrokeclip{\pgfsys@closestrokeclip\ignorespaces} % Fill the current path and use it for clipping. % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgffillclip \def\pgffillclip{\pgfsys@fillclip\ignorespaces} % Fill the current path, stroke it, and use it for clipping. % % Example: % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(0,1)} % \pgflineto{\pgfxy(1,0)} % \pgffillstrokeclip \def\pgffillstrokeclip{\pgfsys@fillstrokeclip\ignorespaces} % Quick version of basic drawing commands % Move current point to (#1,#2). % % #1 = x dimension of new current point % #2 = y dimension of new current point % % Example: % % \pgfqmoveto{0}{0} % \pgfqlineto{1}{1} % \pgfqbezier{2}{1}{2}{2}{3}{2} % \pgfqstroke \def\pgfqmoveto#1#2{\pgfsys@moveto{#1}{#2}\ignorespaces} % Append a line to (#1,#2) to the current path. % % #1 = x dimension of target % #2 = y dimension of target % % Example: % % \pgfqmoveto{0}{0} % \pgfqlineto{1}{1} % \pgfqbezier{2}{1}{2}{2}{3}{2} % \pgfqstroke \def\pgfqlineto#1#2{\pgfsys@lineto{#1}{#2}\ignorespaces} % Append a bezier spline to the current path. % % #1 = x dimension of first support point % #2 = y dimension of first support point % #3 = x dimension of second support point % #4 = y dimension of second support point % #5 = x dimension of target point % #6 = y dimension of target point % % Example: % % \pgfqmoveto{0}{0} % \pgfqlineto{1}{1} % \pgfqbezier{2}{1}{2}{2}{3}{2} % \pgfqstroke \def\pgfqcurveto{\pgfqbezier} \def\pgfqbezier#1#2#3#4#5#6{\pgfsys@bezier{#1}{#2}{#3}{#4}{#5}{#6}\ignorespaces} % Stroke current path. No hooks called. % % Example: % % \pgfqmoveto{0cm}{0cm} % \pgfqlineto{1cm}{1cm} % \pgfqbezier{2cm}{1cm}{2cm}{2cm}{3cm}{2cm} % \pgfqstroke \def\pgfqstroke{\pgfsys@stroke\ignorespaces} % Append a circle of a given radius around the origin to the current path. % % #1 = radius % % Example: % % \pgfzerocircle{3cm} % \pgfstroke \def\pgfzerocircle#1{% \pgf@x=#1\relax\pgf@bpcorr{\pgf@x}% \pgf@y=0.555\pgf@x% \pgfsys@moveto{0}{\pgfget x}% \pgfsys@bezier{\pgfget y}{\pgfget x}{\pgfget x}{\pgfget y}{\pgfget x}{0}% \pgfsys@bezier{\pgfget x}{-\pgfget y}{\pgfget y} {-\pgfget x}{0}{-\pgfget x}% \pgfsys@bezier{-\pgfget y}{-\pgfget x}{-\pgfget x}% {-\pgfget y}{-\pgfget x}{0}% \pgfsys@bezier{-\pgfget x}{\pgfget y}{-\pgfget y}{\pgfget x}{0}{\pgfget x}% \pgfsys@closepath% \ignorespaces} % Append an ellipse with given axis vectors to the current path. % % #1 = first axis vector % #2 = second axis vector % % Example: % % \pgfzeroellipse{\pgfpoint{1cm}{1cm}}{\pgfpoint{-2cm}{2cm}} % \pgfstroke \def\pgfzeroellipse#1#2{% \pgf@process{#1}% \pgf@xa=\pgf@x% store first axis in xa/ya \pgf@ya=\pgf@y% \pgf@process{#2}% \pgf@xb=\pgf@x% store second axis in xb/yb \pgf@yb=\pgf@y% \pgfsys@moveto{\pgfget{xa}}{\pgfget{ya}}% \pgf@x=0.555\pgf@xb% first arc \pgf@y=0.555\pgf@yb% \advance\pgf@x by\pgf@xa% \advance\pgf@y by\pgf@ya% \edef\pgf@temp{{\pgfget x}{\pgfget y}}% \pgf@x=0.555\pgf@xa% \pgf@y=0.555\pgf@ya% \advance\pgf@x by\pgf@xb% \advance\pgf@y by\pgf@yb% \expandafter\pgfsys@bezier\pgf@temp{\pgfget x}{\pgfget y}{\pgfget{xb}}{\pgfget{yb}}% \pgf@xa=-\pgf@xa% flip first axis \pgf@ya=-\pgf@ya% \pgf@x=0.555\pgf@xa% second arc \pgf@y=0.555\pgf@ya% \advance\pgf@x by\pgf@xb% \advance\pgf@y by\pgf@yb% \edef\pgf@temp{{\pgfget x}{\pgfget y}}% \pgf@x=0.555\pgf@xb% \pgf@y=0.555\pgf@yb% \advance\pgf@x by\pgf@xa% \advance\pgf@y by\pgf@ya% \expandafter\pgfsys@bezier\pgf@temp{\pgfget x}{\pgfget y}{\pgfget{xa}}{\pgfget{ya}}% \pgf@xb=-\pgf@xb% flip second axis \pgf@yb=-\pgf@yb% \pgf@x=0.555\pgf@xb% third arc \pgf@y=0.555\pgf@yb% \advance\pgf@x by\pgf@xa% \advance\pgf@y by\pgf@ya% \edef\pgf@temp{{\pgfget x}{\pgfget y}}% \pgf@x=0.555\pgf@xa% \pgf@y=0.555\pgf@ya% \advance\pgf@x by\pgf@xb% \advance\pgf@y by\pgf@yb% \expandafter\pgfsys@bezier\pgf@temp{\pgfget x}{\pgfget y}{\pgfget{xb}}{\pgfget{yb}}% \pgf@xa=-\pgf@xa% flip first axis once more \pgf@ya=-\pgf@ya% \pgf@x=0.555\pgf@xa% fourth arc \pgf@y=0.555\pgf@ya% \advance\pgf@x by\pgf@xb% \advance\pgf@y by\pgf@yb% \edef\pgf@temp{{\pgfget x}{\pgfget y}}% \pgf@x=0.555\pgf@xb% \pgf@y=0.555\pgf@yb% \advance\pgf@x by\pgf@xa% \advance\pgf@y by\pgf@ya% \expandafter\pgfsys@bezier\pgf@temp{\pgfget x}{\pgfget y}{\pgfget{xa}}{\pgfget{ya}}% \pgfsys@closepath% \ignorespaces} % Higher order drawing in xy-coordinate system % Stroke a line from #1 to #2. % % #1 = start x % #2 = start y % #3 = end x % #4 = end y % % Example: % % \pgfxyline(0,0)(0,1) \def\pgfxyline(#1,#2)(#3,#4){% \pgfmoveto{\pgfxy(#1,#2)}% \pgflineto{\pgfxy(#3,#4)}% \pgfstroke} % A bezier curve from #1 to #2 with support #3 and #4. % % #1 = start x % #2 = start y % #3 = first support x % #4 = first support y % #5 = second support x % #6 = second support y % #7 = end x % #8 = end y % % Example: % % \pgfxycurve(0,0)(1,0)(1,1)(2,1) \def\pgfxycurve(#1,#2)(#3,#4)(#5,#6)(#7,#8){% \pgfmoveto{\pgfxy(#1,#2)}% \pgfbezier{\pgfxy(#3,#4)}{\pgfxy(#5,#6)}{\pgfxy(#7,#8)}% \pgfstroke} % Higher order drawing % Stroke a line from #1 to #2. % % #1 = start % #2 = end % % Example: % % \pgfline{\pgfxy(0,0)}{\pgfxy(0,1)} \def\pgfline#1#2{% \pgfmoveto{#1}% \pgflineto{#2}% \pgfstroke} % Stroke or fill an ellipse. % % #1 = ``stroke'' or ``fill'' or ``fillstroke'' % #2 = center % #3 = first axis % #4 = second axis % % Example: % % % Draw a filled circle of radius 3cm around the origin % \pgfellipse[fill]{\pgforigin}{\pgfxy(2,0)}{\pgfxy(0,1)} % % % Draw a non-filled circle of radius 1cm around the point (1,1) % \pgfellipse[stroke]{\pgfxy(1,1)}{\pgfxy(1,1)}{\pgfxy(-2,2)} \def\pgfellipse[#1]#2#3#4{% \begin{pgftranslate}{#2}% \pgfzeroellipse{#3}{#4}% \expandafter\ifx\csname pgfsys@#1\endcsname\relax% \PackageError{pgf}{Stroke style "#1" undefined.}{Using "stroke" instead.}% \pgfsys@stroke\else% \csname pgfsys@#1\endcsname\fi% \end{pgftranslate}\ignorespaces} % Stroke or fill a circle. % % #1 = ``stroke'' or ``fill'' or ``fillstroke'' % #2 = center % #3 = radius % % Example: % % % Draw a filled circle of radius 3cm around the origin % \pgfcircle[fill]{\pgforigin}{3cm} % % % Draw a non-filled circle of radius 1cm around the point (1,1) % \pgfcircle[stroke]{\pgxy(1,1)}{3cm} \def\pgfcircle[#1]#2#3{% \begin{pgftranslate}{#2}% \pgfzerocircle{#3}% \expandafter\ifx\csname pgfsys@#1\endcsname\relax% \PackageError{pgf}{Stroke style "#1" undefined.}{Using "stroke" instead.}% \pgfsys@stroke\else% \csname pgfsys@#1\endcsname\fi% \end{pgftranslate}\ignorespaces} % Stroke or fill a rectangle. % % #1 = ``stroke'' or ``fill'' or ``fillstroke'' % #2 = lower left corner point of rectangle % #3 = width and height vector % % Example: % % % Draw a filled rectangle with corners (2,2) and (3,3) % \pgfrect[fill]{\pgfxy(2,2)}{\pgfxy(1,1)} % % % Draw a non-filled rectangle with corners (-1,-1) and (1,1) % \pgfrect[fill]{\pgfxy(-1,-1)}{\pgfxy(2,2)} \def\pgfrect[#1]#2#3{% \pgf@process{#3}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#2}% \pgfsys@rect{\pgfget x}{\pgfget y}{\pgfget{xa}}{\pgfget{ya}}% \csname pgfsys@#1\endcsname% \ignorespaces} % Draw a grid. % % #1 = lower left point of grid % #2 = upper right point of grid % % Options: % % stepx = x-step dimension (default 1cm) % stepy = y-step dimension (default 1cm) % step = dimesion vector % % Example: % % \pgfsetlinewidth{0.8pt} % \pgfgrid{\pgfxy(0,0)}{\pgfxy(3,2)} % \pgfsetlinewidth{0.4pt} % \pgfgrid[stepx=1cm,stepy=1cm]{\pgfxy(0,0)}{\pgfxy(3,2)} \define@key{pgfbase}{stepx}{\pgf@x=#1\pgf@bpcorr{\pgf@x}\relax} \define@key{pgfbase}{stepy}{\pgf@y=#1\pgf@bpcorr{\pgf@y}\relax} \define@key{pgfbase}{step}{\pgf@process{#1}} \newcommand\pgfgrid[3][]{% \setkeys{pgfbase}{stepx=1cm,stepy=1cm}% \setkeys{pgfbase}{#1}% \pgf@xc=\pgf@x% \pgf@yc=\pgf@y% \pgf@process{#3}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \pgf@process{#2}% \pgf@xa=\pgf@x\relax% \pgf@ya=\pgf@y\relax% \pgf@counta=\pgf@y\relax% \pgf@countb=\pgf@yc\relax% \divide\pgf@counta by\pgf@countb\relax% \pgf@y=\pgf@counta\pgf@yc\relax% \ifdim\pgf@y<\pgf@ya% \advance\pgf@y by\pgf@yc% \fi% \loop% horizontal lines \pgfsys@moveto{\pgfget{x}}{\pgfget{y}}% \pgfsys@lineto{\pgfget{xb}}{\pgfget{y}}% \advance\pgf@y by\pgf@yc% \ifdim\pgf@y<\pgf@yb% \repeat% \advance\pgf@y by-0.01pt\relax% \ifdim\pgf@y<\pgf@yb% \pgfsys@moveto{\pgfget{x}}{\pgfget{y}}% \pgfsys@lineto{\pgfget{xb}}{\pgfget{y}}% \fi% \pgf@counta=\pgf@x\relax% \pgf@countb=\pgf@xc\relax% \divide\pgf@counta by\pgf@countb\relax% \pgf@x=\pgf@counta\pgf@xc\relax% \ifdim\pgf@x<\pgf@xa% \advance\pgf@x by\pgf@xc% \fi% \loop% vertical lines \pgfsys@moveto{\pgfget{x}}{\pgfget{ya}}% \pgfsys@lineto{\pgfget{x}}{\pgfget{yb}}% \advance\pgf@x by\pgf@xc% \ifdim\pgf@x<\pgf@xb% \repeat% \advance\pgf@x by-0.01pt\relax% \ifdim\pgf@x<\pgf@xb% \pgfsys@moveto{\pgfget{x}}{\pgfget{ya}}% \pgfsys@lineto{\pgfget{x}}{\pgfget{yb}}% \fi% \pgfsys@stroke% \ignorespaces} % Object reuse % Internal box \newbox\pgfobjectbox % Define a pgf object for reuse. Such objects will be stored % efficiently internally. % % #1 = name for later reuse % #2 = lower left corner point of bounding box % #3 = upper right left corner point of bounding box % #4 = pure pgf code (nothing too fancy!) % % Description: % % Used to define reusable objects. The object must be composed of % basic pgf graphic primitives. Nothing fancy can be used. The % created object will be stored as an xform object in pdf or as a % postscript procedure in postscript. % % Example: % % \pgfdefobject{myrect}{\pgfpoint{-1pt}{-1pt}}{\pgfpoint{11pt}{11pt}} % {\pgfqmoveto{0}{0} % \pgfqmoveto{10}{0} % \pgfqmoveto{10}{10} % \pgfqmoveto{0}{10} % \pgfclosestroke} % % \begin{pgfpicture}{0cm}{0cm}{1cm}{1cm} % \pgfuseobject{myrect} % \end{pgfpicture} \def\pgfdefobject#1#2#3#4{\pgfsys@defobject{#1}{#2}{#3}{#4}\ignorespaces} % Use an object that was previously defined using pgfdefobject % % #1 = name of previously defined object % % Example: % % \pgfdefobject{myrect}{\pgfpoint{-1pt}{-1pt}}{\pgfpoint{11pt}{11pt}} % {\pgfqmoveto{0}{0} % \pgfqmoveto{10}{0} % \pgfqmoveto{10}{10} % \pgfqmoveto{0}{10} % \pgfclosestroke} % % \begin{pgfpicture}{0cm}{0cm}{1cm}{1cm} % \pgfuseobject{myrect} % \end{pgfpicture} \def\pgfuseobject#1{\pgfsys@useobject{#1}{}\ignorespaces} % Use an object that was previously defined using pgfdefobject, but % magnify the object by the current x and y register values % % #1 = name of previously defined object % % Example: % % \pgfdefobject{myrect}{\pgfpoint{-1pt}{-1pt}}{\pgfpoint{11pt}{11pt}} % {\pgfqmoveto{0}{0} % \pgfqmoveto{10}{0} % \pgfqmoveto{10}{10} % \pgfqmoveto{0}{10} % \pgfclosestroke} % % \begin{pgfpicture}{0cm}{0cm}{1cm}{1cm} % \pgf@x=2pt% Scale by factor two in x-direction % \pgf@y=2pt% Scale by factor two in y-direction % \pgfuseobjectmagnify{myrect} % \end{pgfpicture} \def\pgfuseobjectmagnify#1{% \pgfsys@useobject{#1}{\pgfsys@scale{\pgfget x}{\pgfget y}}\ignorespaces} % Coordinate systems % Internal registers \newdimen\pgf@xx \newdimen\pgf@xy \newdimen\pgf@yx \newdimen\pgf@yy \newdimen\pgf@zx \newdimen\pgf@zy % Store a value in polar-coordinates % % #1 = a degree % #2 = a radius % % x = #2 * cos(#1) % y = #2 * sin(#2) % % Example: % % % Create a slanted rectangle % % \pgfmoveto{\pgfpolar{30}{1cm}} \def\pgfpolar#1#2{\pgfsincos{#1}% \pgf@xa=#2\relax\pgf@bpcorr{\pgf@xa}% \pgf@ya=\pgf@xa\relax% \pgf@mult{\pgf@xa}{\pgfget x}{\pgf@xa}% \pgf@mult{\pgf@ya}{\pgfget y}{\pgf@ya}% \pgf@y=\pgf@xa\relax% \pgf@x=\pgf@ya\ignorespaces} % Store the vector #1 * x-vec + #2 * y-vec % % #1 = a factor for the x-vector % #2 = a factor fot the y-vector % % x = x-component of result vector % y = y-component of result vector % % Description: % % This command can be used to create a new coordinate system % without using the rotate/translate/scale commands. This % may be useful, if you do not want arrows and line width to % be scaled/transformed together with the coordinate system. % % Example: % % % Create a slanted rectangle % % \pgfsetxvec{\pgfpoint{1cm}{1cm}} % \pgfsetyvec{\pgfpoint{0cm}{1cm}} % % \pgfmoveto{\pgfxy(0,0)} % \pgflineto{\pgfxy(1,0)} % \pgflineto{\pgfxy(1,1)} % \pgflineto{\pgfxy(0,1)} % \pgfclosestroke \def\pgfxy(#1,#2){\pgf@x=#1\pgf@xx% \advance\pgf@x by #2\pgf@yx% \pgf@y=#1\pgf@xy% \advance\pgf@y by #2\pgf@yy} % Store the vector #1 * x-vec + #2 * y-vec + #3 * z-vec % % #1 = a factor for the x-vector % #2 = a factor fot the y-vector % #3 = a factor fot the z-vector % % x = x-component of result vector % y = y-component of result vector % % % Description: % % This command allows you to use a 3d coordinate system. % % % Example: % % % Draw a cubus % % \pgfline{\pgfxyz(0,0,0)}{\pgfxyz(0,0,1)} % \pgfline{\pgfxyz(0,1,0)}{\pgfxyz(0,1,1)} % \pgfline{\pgfxyz(1,0,0)}{\pgfxyz(1,0,1)} % \pgfline{\pgfxyz(1,1,0)}{\pgfxyz(1,1,1)} % \pgfline{\pgfxyz(0,0,0)}{\pgfxyz(0,1,0)} % \pgfline{\pgfxyz(0,0,1)}{\pgfxyz(0,1,1)} % \pgfline{\pgfxyz(1,0,0)}{\pgfxyz(1,1,0)} % \pgfline{\pgfxyz(1,0,1)}{\pgfxyz(1,1,1)} % \pgfline{\pgfxyz(0,0,0)}{\pgfxyz(1,0,0)} % \pgfline{\pgfxyz(0,0,1)}{\pgfxyz(1,0,1)} % \pgfline{\pgfxyz(0,1,0)}{\pgfxyz(1,1,0)} % \pgfline{\pgfxyz(0,1,1)}{\pgfxyz(1,1,1)} \def\pgfxyz(#1,#2,#3){\pgf@x=#1\pgf@xx% \advance\pgf@x by #2\pgf@yx% \advance\pgf@x by #3\pgf@zx% \pgf@y=#1\pgf@xy% \advance\pgf@y by #2\pgf@yy% \advance\pgf@y by #3\pgf@zy} % Set the x-vector % % #1 = a point the is the new x-vector % % Example: % % \pgfsetxvec{\pgfpoint{1cm}{0cm}} \def\pgfsetxvec#1{% \pgf@process{#1}% \pgf@xx=\pgf@x% \pgf@xy=\pgf@y% \ignorespaces} % Set the y-vector % % #1 = a point the is the new y-vector % % Example: % % \pgfsetyvec{\pgfpoint{0cm}{1cm}} \def\pgfsetyvec#1{% \pgf@process{#1}% \pgf@yx=\pgf@x% \pgf@yy=\pgf@y% \ignorespaces} % Set the z-vector % % #1 = a point the is the new z-vector % % Example: % % \pgfsetzvec{\pgfpoint{-0.385cm}{-0.385cm}} \def\pgfsetzvec#1{% \pgf@process{#1}% \pgf@zx=\pgf@x% \pgf@zy=\pgf@y% \ignorespaces} % Default values \pgfsetxvec{\pgfpoint{1cm}{0cm}} \pgfsetyvec{\pgfpoint{0cm}{1cm}} \pgfsetzvec{\pgfpoint{-0.385cm}{-0.385cm}} % Picture environment % % #1 = x-dimension of lower left corner % #2 = y-dimension of lower left corner % #3 = x-dimension of upper right corner % #4 = y-dimension of upper right corner % % Example: % % \begin{pgfpicture}{-2cm}{-2cm}{2cm}{2cm}% % \pgfrect[stroke]{\pgfxy(-2,0)}{\pgfxy(1,1)} % \pgfrect[stroke]{\pgfxy(1,0)}{\pgfxy(1,1)} % % \pgfsetendarrow{\pgfarrowto} % \pgfline{\pgfxy(-0.9,0.2)}{\pgfxy(0.9,0.4)} % \pgfline{\pgfxy(0.9,0.6)}{\pgfxy(-0.9,0.8)} % \end{pgfpicture} \def\pgfpicture#1#2#3#4{% \pgf@xa=#3% \advance\pgf@xa by-#1% \pgf@ya=#4% \advance\pgf@ya by-#2% \setbox\pgfpic\hb@xt@\pgf@xa\bgroup \hskip-#1% \lower#2\hbox\bgroup% \pgfsys@openpicture% \pgfsetlinewidth{0.4pt}% \color{.}% \pgfex=1ex\pgfem=1em% \nullfont} \def\endpgfpicture{\pgfsys@closepicture% \egroup\hss\egroup \ht\pgfpic\pgf@ya\dp\pgfpic\z@ \mbox{\box\pgfpic}} % Boxed Picture environment % % #1 = x-dimension of lower left corner % #2 = y-dimension of lower left corner % #3 = x-dimension of upper right corner % #4 = y-dimension of upper right corner % % % Description: % % Draws a box around the picture. Useful for fitting the size. % % % Example: % % \begin{pgfpictureboxed}{-2cm}{-2cm}{2cm}{2cm}% % \pgfrect[stroke]{\pgfxy(-2,0)}{\pgfxy(1,1)} % \pgfrect[stroke]{\pgfxy(1,0)}{\pgfxy(1,1)} % % \pgfsetendarrow{\pgfarrowto} % \pgfline{\pgfxy(-0.9,0.2)}{\pgfxy(0.9,0.4)} % \pgfline{\pgfxy(0.9,0.6)}{\pgfxy(-0.9,0.8)} % \end{pgfpictureboxed} \def\pgfpictureboxed#1#2#3#4{% \begin{pgfpicture}{#1}{#2}{#3}{#4}% \pgfmoveto{\pgfpoint{#1}{#2}}% \pgflineto{\pgfpoint{#1}{#4}}% \pgflineto{\pgfpoint{#3}{#4}}% \pgflineto{\pgfpoint{#3}{#2}}% \pgfclosestroke\ignorespaces} \def\endpgfpictureboxed{\end{pgfpicture}} % Translation and rotation % Magnification environment % % #1 = x magnification factor % #2 = y magnification factor % % Example: % % \begin{pgfmagnify}{2}{2} % \pgfline{\pgforigin}{\pgfxy(1,0)} % \end{pgfmagnify} \def\pgfmagnify#1#2{% \begin{pgfscope}\pgfsys@scale{#1}{#2}\ignorespaces} \def\endpgfmagnify{\end{pgfscope}\ignorespacesafterend\ignorespaces} % Translation environment % % #1 = new origin % % Example: % % \begin{pgftranslate}{\pgfpoint{0cm}{1cm}} % \pgfline{\pgforigin}{\pgfxy(1,0)} % \end{pgftranslate} \def\pgftranslate#1{% \pgf@process{#1}% \begin{pgfscope}\pgfsys@translate{\pgfget x}{\pgfget y}\ignorespaces} \def\endpgftranslate{\end{pgfscope}\ignorespacesafterend\ignorespaces} % Translation command % % #1 = new origin % % Example: % % \pgftranslateto{\pgfpoint{0cm}{1cm}} \def\pgftranslateto#1{% \pgf@process{#1}% \pgfsys@translate{\pgfget x}{\pgfget y}\ignorespaces} % Rotation environment % % #1 = sin/cos of rotation degree (use \pgfdegree) % % Example: % % \begin{pgfrotateby}{\pgfdegree{30}} % \pgfline{\pgforigin}{\pgfxy(1,0)} % \end{pgfrotateby} \def\pgfrotateby#1{% \begin{pgfscope}% \pgf@process{#1}% \pgf@xa=-\pgf@x% \pgfsys@transform{\pgfget y}{\pgfget x}{\pgfget{xa}}{\pgfget y}% {0}{0}\ignorespaces} \def\endpgfrotateby{\end{pgfscope}\ignorespacesafterend\ignorespaces} % Put something at a given location % % #1 = place where to put an object % % Example: % % \pgfputat{\pgfxy(1,0)}{\pgfbox[center,center]{Hello world}} \long\def\pgfputat#1#2{% \begin{pgftranslate}{#1}#2\end{pgftranslate}\ignorespaces} % Declare an image % % #1 = optional argument: width, height, page specification % #2 = name of the image for later use % #4 = filename without extension, automatic extensions are .pdf, % .jpg, and .png for PDF and .ps, .eps, .epsi for postscript. % % Description: % % This command declares an image file for later use. Even if the image % is used several times in the document, in PDF it will only be stored % once. % % Example: % % \pgfdeclareimage[width=2cm,page=2]{myimage}{imagefilename} \pgfdef\pgfdeclareimage[#1]#2#3{% \setkeys{pgfimage}{height=,width=,page=,interpolate=false,mask=}% defaults \setkeys{pgfimage}{#1}% % Try to find the file \gdef\pgf@filename{}% % If page= parameter is not empty, try that file first: \ifx\pgf@imagepage\@empty% \else% \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3.page\pgf@imagepage}% \fi% \ifx\pgf@filename\@empty% \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3}% \else% \setkeys{pgfimage}{page=}% make page empty \fi% \ifx\pgf@filename\@empty% \PackageWarning{pgf}% {File "#3" not found when defining image "#2".\MessageBreak Tried all extensions in "\pgfsys@imagesuffixlist"}% \pgf@declaredraftimage{#2}% \else% \ifpgf@draftmode% \pgf@declaredraftimage{#2}% \else% \pgfsys@defineimage% \fi% \fi% \expandafter\global\expandafter\let\csname pgf@image@#2!\endcsname=\pgf@image% } \define@key{pgfimage}{width}{\edef\pgf@imagewidth{#1}} \define@key{pgfimage}{height}{\edef\pgf@imageheight{#1}} \define@key{pgfimage}{page}{\edef\pgf@imagepage{#1}} \define@key{pgfimage}{interpolate}[true]{\edef\pgf@imageinterpolate{/Interpolate #1}} \define@key{pgfimage}{mask}{% \edef\pgf@imagemask{#1}% \ifx\pgf@imagemask\@empty% \else% \@ifundefined{pgf@mask@#1}% {\PackageError{pgf}{Undefined mask "#1".}{}% \edef\pgf@imagemask{}}% {\edef\pgf@imagemask{\csname pgf@mask@#1\endcsname}% \ifx\pgf@imagemask\@empty% \else \edef\pgf@imagemask{/SMask \pgf@imagemask\space 0 R}% \fi}% \fi} \def\pgf@findfile#1:#2+#3{% \IfFileExists{#3.#1}% {\xdef\pgf@filename{#3.#1}}% {\def\pgf@mightbeempty{#2}% \ifx\pgf@mightbeempty\@empty\else% \pgf@findfile#2+{#3}% \fi}} \def\pgf@declaredraftimage#1{% \ifx\pgf@imagewidth\@empty% \PackageWarning{pgf}{Missing width for image "#1" in draft mode.\MessageBreak Using 1cm instead}% \edef\pgf@imagewidth{1cm}% \fi% \ifx\pgf@imageheight\@empty% \PackageWarning{pgf}{Missing height for image "#1" in draft mode.\MessageBreak Using 1cm instead}% \edef\pgf@imageheight{1cm}% \fi% \ifx\pgf@imagepage\@empty\else\edef\pgf@imagepagetext{ page \pgf@imagepagetext}\fi% \edef\pgf@image{% \hbox to \pgf@imagewidth{% \vrule\kern-0.4pt% \vbox to \pgf@imageheight{% \hrule\vfil% \hbox to \pgf@imagewidth{\hskip-10cm\hfil\noexpand\tiny#1\pgf@imagepage\hfil\hskip-10cm}% \vfil\hrule}% \kern-0.4pt\vrule}% }% } % Declare a soft mask % % #1 = optional argument: matte specification. default matte is % white. % #2 = name of the mask for later use % #3 = filename without extension, automatic extensions are .pdf, % .jpg, and .png for PDF. Postscript is not supported. % % Description: % % This command declares a soft mask for later masking an image. The % declared mask should be used together with an image of exactly the % same height/width if matte is defined. Matte should be the % preblended background color (see pdf spec for details). % % Example: % % \pgfdeclaremask[matte=white]{maskname}{maskfilename} % \pgfdeclareimage[mask=maskname]{image}{imagefilename} \pgfdef\pgfdeclaremask[#1]#2#3{% \setkeys{pgfmask}{matte={1 1 1}}% defaults \setkeys{pgfmask}{#1}% \def\pgf@mask{}% % Try to find the file \gdef\pgf@filename{}% \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3}% \ifx\pgf@filename\@empty% \PackageWarning{pgf}% {File "#3" not found when defining mask "#2".\MessageBreak Tried all extensions in "\pgfsys@imagesuffixlist"}% \else% \pgfsys@definemask% \fi% \expandafter\global\expandafter\let\csname pgf@mask@#2\endcsname=\pgf@mask% } \define@key{pgfmask}{matte}{\edef\pgf@maskmatte{#1}} % Create an alias name for an image % % #1 = name of the alias % #2 = name of the original % % Example: % % \pgfdeclareimage{image}{1cm}{1cm}{filename % \pgfaliasimage{alias}{image} % \pgfuseimage{alias} \def\pgfaliasimage#1#2{% \expandafter\global\expandafter\let\expandafter\pgf@temp\expandafter=\csname pgf@image@#2!\endcsname% \expandafter\global\expandafter\let\csname pgf@image@#1!\endcsname=\pgf@temp% } % Use an image % % #1 = name of a previously declared image % % Example: % % \pgfputat{\pgforigin}{\pgfbox[left,base]{\pgfuseimage{myimage}}} \def\pgfuseimage#1{% \def\pgf@imagename{pgf@image@#1}% \pgf@tryextensions{\pgf@imagename}{\pgfalternateextension}% \expandafter\@ifundefined\expandafter{\pgf@imagename}% {\PackageError{pgf}{Undefined image "#1"}{}}% {{\leavevmode\csname\pgf@imagename\endcsname}}} \def\pgf@tryextensions#1#2{% \edef\pgf@args{[#2!]}\expandafter\pgf@@tryextensions\pgf@args{#1}} \def\pgf@@tryextensions[#1!#2]#3{% \expandafter\@ifundefined\expandafter{#3.#1!#2}% {\def\pgf@temp{#2}% \ifx\pgf@temp\@empty% \edef#3{#3!}% \else% \pgf@@tryextensions[#2]{#3}% \fi}% {\edef#3{#3.#1!#2}}} % Alternate image % % Description: % % When an image is used, pgf first attempts to use the image with the % alternate extension added. If this fails, the original image is % used. If the alternate extension contains ``!'', then the text up to % the ! is successively removed and the remainder is tried as an % alternate extension. % % Example: % % \def\pgfalternateextension{20!white} \def\pgfalternateextension{} % Directly insert an image % % #1 = optional argument: width, height, page specification % #2 = file name % % Description: % % Directly inserts an image without declaration. You can, however, % still access this image using the name pgflastimage. By using % pgfaliasimage, you can also save this image for later. % % Example: % % \pgfimage[height=2cm]{filename} \pgfdef\pgfimage[#1]#2{% \pgfdeclareimage[#1]{pgflastimage}{#2}% \pgfuseimage{pgflastimage}} % Mathematical stuff % Internal registers \newcount\pgf@counta \newcount\pgf@countb % Internal setting function \def\pgf@setmath#1#2{\edef\pgf@temp{#2pt}\csname pgf@#1\endcsname=\pgf@temp} % Convert a degree into a sin/cos pair % % #1 = degree % % x = sin of #1 % y = cos of #1 % % Example: % % \begin{pgffrotateby}{\pgfdegree{30}} % \pgfline{\pgforigin}{\pgfxy(1,0)} % \end{pgfrotateby} \def\pgfdegree#1{\pgfsincos{#1}\ignorespaces} % Calculate sin of a degree % % #1 = degree % % x = sin of #1 % % Example: % % \pgfsin{30} \def\pgfsin#1{% \pgf@counta=#1\relax% \pgf@countb=90% \advance\pgf@countb by-\pgf@counta% \ifnum\pgf@countb>179% \advance\pgf@countb by-360% \else% \ifnum\pgf@countb<-179% \advance\pgf@countb by360% \fi\fi% \ifnum\pgf@countb<0\relax% \pgf@countb=-\pgf@countb% \fi% \pgf@setmath{x}{\csname pgf@cos\the\pgf@countb\endcsname}} % Calculate cos of a degree % % #1 = degree % % x = cos of #1 % % Example: % % \pgfcos{30} \def\pgfcos#1{% \pgf@counta=#1\relax% \ifnum\pgf@counta>179% \advance\pgf@counta by-360% \else% \ifnum\pgf@counta<-179% \advance\pgf@counta by360% \fi\fi% \ifnum\pgf@counta<0\relax% \pgf@counta=-\pgf@counta% \fi% \pgf@setmath{x}{\csname pgf@cos\the\pgf@counta\endcsname}} % Calculate sin and cos of a degree % % #1 = degree % % x = cos of #1 % y = sin of #1 % % Example: % % \pgfcos{30} \def\pgfsincos#1{% \pgf@counta=#1\relax% \ifnum\pgf@counta>179% \advance\pgf@counta by-360% \else% \ifnum\pgf@counta<-179% \advance\pgf@counta by360% \fi\fi\relax% \pgf@countb=\pgf@counta\relax% \ifnum\pgf@counta<0\relax% \pgf@counta=-\pgf@counta% \fi\relax% \pgf@setmath{y}{\csname pgf@cos\the\pgf@counta\endcsname}% \pgf@counta=90% \advance\pgf@counta by-\pgf@countb\relax% \ifnum\pgf@counta>179% \advance\pgf@counta by-360% \else% \ifnum\pgf@counta<-179% \advance\pgf@counta by360% \fi\fi\relax% \ifnum\pgf@counta<0\relax% \pgf@counta=-\pgf@counta% \fi\relax% \pgf@setmath{x}{\csname pgf@cos\the\pgf@counta\endcsname}} % Normalise a point. % % #1 = point with coordinates (a,b) % % x = a/\sqrt(a*a+b*b) % y = b/\sqrt(a*a+b*b) % % Example: % % \pgfnormalise{\pgfxy(2,1)} \def\pgfnormalise#1{% \pgf@process{#1}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \ifnum\pgf@x<0\relax% move into first quadrant \pgf@x=-\pgf@x% \fi% \ifnum\pgf@y<0\relax% \pgf@y=-\pgf@y% \fi% \ifnum\pgf@x>\pgf@y% x > y \pgf@counta=\pgf@x% \pgf@countb=\pgf@y% \multiply\pgf@countb by 100% \ifnum\pgf@counta<4096\relax% \pgf@x=1pt\relax% \pgf@y=0pt\relax% \else% \divide\pgf@countb by \pgf@counta% \pgf@setmath{x}{\csname pgf@cosfrac\the\pgf@countb\endcsname}% \divide\pgf@counta by 4096% \pgf@y=16\pgf@ya% \divide\pgf@y by \pgf@counta% \pgf@mult{\pgf@y}{\pgfget x}{\pgf@y}% \fi% \ifnum\pgf@xa<0\relax% \pgf@x=-\pgf@x% \fi% \else% x <= y \pgf@counta=\pgf@y% \pgf@countb=\pgf@x% \multiply\pgf@countb by 100% \ifnum\pgf@counta<4096\relax% \pgf@y=1pt\relax% \pgf@x=0pt\relax% \else% \divide\pgf@countb by \pgf@counta% \pgf@setmath{y}{\csname pgf@cosfrac\the\pgf@countb\endcsname}% \divide\pgf@counta by 4096% \pgf@x=16\pgf@xa% \divide\pgf@x by \pgf@counta% \pgf@mult{\pgf@x}{\pgfget y}{\pgf@x}% \fi% \ifnum\pgf@ya<0\relax% \pgf@y=-\pgf@y% \fi% \fi\ignorespaces} % Internal function \def\pgf@mul#1#2#3{#2=#1#3} \def\pgf@mult#1#2#3{\edef\pgf@temp{{#2}}\expandafter\pgf@mul\pgf@temp{#1}{#3}} % Internal tables \def\pgf@def#1#2#3{\expandafter\def\csname pgf@#1#2\endcsname{#3}} \pgf@def{cos}{0}{1} \pgf@def{cos}{1}{0.999848} \pgf@def{cos}{2}{0.999391} \pgf@def{cos}{3}{0.99863} \pgf@def{cos}{4}{0.997564} \pgf@def{cos}{5}{0.996195} \pgf@def{cos}{6}{0.994522} \pgf@def{cos}{7}{0.992546} \pgf@def{cos}{8}{0.990268} \pgf@def{cos}{9}{0.987688} \pgf@def{cos}{10}{0.984808} \pgf@def{cos}{11}{0.981627} \pgf@def{cos}{12}{0.978148} \pgf@def{cos}{13}{0.97437} \pgf@def{cos}{14}{0.970296} \pgf@def{cos}{15}{0.965926} \pgf@def{cos}{16}{0.961262} \pgf@def{cos}{17}{0.956305} \pgf@def{cos}{18}{0.951057} \pgf@def{cos}{19}{0.945519} \pgf@def{cos}{20}{0.939693} \pgf@def{cos}{21}{0.93358} \pgf@def{cos}{22}{0.927184} \pgf@def{cos}{23}{0.920505} \pgf@def{cos}{24}{0.913545} \pgf@def{cos}{25}{0.906308} \pgf@def{cos}{26}{0.898794} \pgf@def{cos}{27}{0.891007} \pgf@def{cos}{28}{0.882948} \pgf@def{cos}{29}{0.87462} \pgf@def{cos}{30}{0.866025} \pgf@def{cos}{31}{0.857167} \pgf@def{cos}{32}{0.848048} \pgf@def{cos}{33}{0.838671} \pgf@def{cos}{34}{0.829038} \pgf@def{cos}{35}{0.819152} \pgf@def{cos}{36}{0.809017} \pgf@def{cos}{37}{0.798636} \pgf@def{cos}{38}{0.788011} \pgf@def{cos}{39}{0.777146} \pgf@def{cos}{40}{0.766044} \pgf@def{cos}{41}{0.75471} \pgf@def{cos}{42}{0.743145} \pgf@def{cos}{43}{0.731354} \pgf@def{cos}{44}{0.71934} \pgf@def{cos}{45}{0.707107} \pgf@def{cos}{46}{0.694658} \pgf@def{cos}{47}{0.681998} \pgf@def{cos}{48}{0.669131} \pgf@def{cos}{49}{0.656059} \pgf@def{cos}{50}{0.642788} \pgf@def{cos}{51}{0.62932} \pgf@def{cos}{52}{0.615661} \pgf@def{cos}{53}{0.601815} \pgf@def{cos}{54}{0.587785} \pgf@def{cos}{55}{0.573576} \pgf@def{cos}{56}{0.559193} \pgf@def{cos}{57}{0.544639} \pgf@def{cos}{58}{0.529919} \pgf@def{cos}{59}{0.515038} \pgf@def{cos}{60}{0.5} \pgf@def{cos}{61}{0.48481} \pgf@def{cos}{62}{0.469472} \pgf@def{cos}{63}{0.45399} \pgf@def{cos}{64}{0.438371} \pgf@def{cos}{65}{0.422618} \pgf@def{cos}{66}{0.406737} \pgf@def{cos}{67}{0.390731} \pgf@def{cos}{68}{0.374607} \pgf@def{cos}{69}{0.358368} \pgf@def{cos}{70}{0.34202} \pgf@def{cos}{71}{0.325568} \pgf@def{cos}{72}{0.309017} \pgf@def{cos}{73}{0.292372} \pgf@def{cos}{74}{0.275637} \pgf@def{cos}{75}{0.258819} \pgf@def{cos}{76}{0.241922} \pgf@def{cos}{77}{0.224951} \pgf@def{cos}{78}{0.207912} \pgf@def{cos}{79}{0.190809} \pgf@def{cos}{80}{0.173648} \pgf@def{cos}{81}{0.156434} \pgf@def{cos}{82}{0.139173} \pgf@def{cos}{83}{0.121869} \pgf@def{cos}{84}{0.104528} \pgf@def{cos}{85}{0.0871557} \pgf@def{cos}{86}{0.0697565} \pgf@def{cos}{87}{0.052336} \pgf@def{cos}{88}{0.0348995} \pgf@def{cos}{89}{0.0174524} \pgf@def{cos}{90}{0} \pgf@def{cos}{91}{-0.0174524} \pgf@def{cos}{92}{-0.0348995} \pgf@def{cos}{93}{-0.052336} \pgf@def{cos}{94}{-0.0697565} \pgf@def{cos}{95}{-0.0871557} \pgf@def{cos}{96}{-0.104528} \pgf@def{cos}{97}{-0.121869} \pgf@def{cos}{98}{-0.139173} \pgf@def{cos}{99}{-0.156434} \pgf@def{cos}{100}{-0.173648} \pgf@def{cos}{101}{-0.190809} \pgf@def{cos}{102}{-0.207912} \pgf@def{cos}{103}{-0.224951} \pgf@def{cos}{104}{-0.241922} \pgf@def{cos}{105}{-0.258819} \pgf@def{cos}{106}{-0.275637} \pgf@def{cos}{107}{-0.292372} \pgf@def{cos}{108}{-0.309017} \pgf@def{cos}{109}{-0.325568} \pgf@def{cos}{110}{-0.34202} \pgf@def{cos}{111}{-0.358368} \pgf@def{cos}{112}{-0.374607} \pgf@def{cos}{113}{-0.390731} \pgf@def{cos}{114}{-0.406737} \pgf@def{cos}{115}{-0.422618} \pgf@def{cos}{116}{-0.438371} \pgf@def{cos}{117}{-0.45399} \pgf@def{cos}{118}{-0.469472} \pgf@def{cos}{119}{-0.48481} \pgf@def{cos}{120}{-0.5} \pgf@def{cos}{121}{-0.515038} \pgf@def{cos}{122}{-0.529919} \pgf@def{cos}{123}{-0.544639} \pgf@def{cos}{124}{-0.559193} \pgf@def{cos}{125}{-0.573576} \pgf@def{cos}{126}{-0.587785} \pgf@def{cos}{127}{-0.601815} \pgf@def{cos}{128}{-0.615661} \pgf@def{cos}{129}{-0.62932} \pgf@def{cos}{130}{-0.642788} \pgf@def{cos}{131}{-0.656059} \pgf@def{cos}{132}{-0.669131} \pgf@def{cos}{133}{-0.681998} \pgf@def{cos}{134}{-0.694658} \pgf@def{cos}{135}{-0.707107} \pgf@def{cos}{136}{-0.71934} \pgf@def{cos}{137}{-0.731354} \pgf@def{cos}{138}{-0.743145} \pgf@def{cos}{139}{-0.75471} \pgf@def{cos}{140}{-0.766044} \pgf@def{cos}{141}{-0.777146} \pgf@def{cos}{142}{-0.788011} \pgf@def{cos}{143}{-0.798636} \pgf@def{cos}{144}{-0.809017} \pgf@def{cos}{145}{-0.819152} \pgf@def{cos}{146}{-0.829038} \pgf@def{cos}{147}{-0.838671} \pgf@def{cos}{148}{-0.848048} \pgf@def{cos}{149}{-0.857167} \pgf@def{cos}{150}{-0.866025} \pgf@def{cos}{151}{-0.87462} \pgf@def{cos}{152}{-0.882948} \pgf@def{cos}{153}{-0.891007} \pgf@def{cos}{154}{-0.898794} \pgf@def{cos}{155}{-0.906308} \pgf@def{cos}{156}{-0.913545} \pgf@def{cos}{157}{-0.920505} \pgf@def{cos}{158}{-0.927184} \pgf@def{cos}{159}{-0.93358} \pgf@def{cos}{160}{-0.939693} \pgf@def{cos}{161}{-0.945519} \pgf@def{cos}{162}{-0.951057} \pgf@def{cos}{163}{-0.956305} \pgf@def{cos}{164}{-0.961262} \pgf@def{cos}{165}{-0.965926} \pgf@def{cos}{166}{-0.970296} \pgf@def{cos}{167}{-0.97437} \pgf@def{cos}{168}{-0.978148} \pgf@def{cos}{169}{-0.981627} \pgf@def{cos}{170}{-0.984808} \pgf@def{cos}{171}{-0.987688} \pgf@def{cos}{172}{-0.990268} \pgf@def{cos}{173}{-0.992546} \pgf@def{cos}{174}{-0.994522} \pgf@def{cos}{175}{-0.996195} \pgf@def{cos}{176}{-0.997564} \pgf@def{cos}{177}{-0.99863} \pgf@def{cos}{178}{-0.999391} \pgf@def{cos}{179}{-0.999848} \pgf@def{cos}{180}{-1} \pgf@def{cosfrac}{0}{1} \pgf@def{cosfrac}{1}{0.99995} \pgf@def{cosfrac}{2}{0.9998} \pgf@def{cosfrac}{3}{0.99955} \pgf@def{cosfrac}{4}{0.999201} \pgf@def{cosfrac}{5}{0.998752} \pgf@def{cosfrac}{6}{0.998205} \pgf@def{cosfrac}{7}{0.997559} \pgf@def{cosfrac}{8}{0.996815} \pgf@def{cosfrac}{9}{0.995974} \pgf@def{cosfrac}{10}{0.995037} \pgf@def{cosfrac}{11}{0.994004} \pgf@def{cosfrac}{12}{0.992877} \pgf@def{cosfrac}{13}{0.991656} \pgf@def{cosfrac}{14}{0.990342} \pgf@def{cosfrac}{15}{0.988936} \pgf@def{cosfrac}{16}{0.987441} \pgf@def{cosfrac}{17}{0.985856} \pgf@def{cosfrac}{18}{0.984183} \pgf@def{cosfrac}{19}{0.982424} \pgf@def{cosfrac}{20}{0.980581} \pgf@def{cosfrac}{21}{0.978653} \pgf@def{cosfrac}{22}{0.976644} \pgf@def{cosfrac}{23}{0.974555} \pgf@def{cosfrac}{24}{0.972387} \pgf@def{cosfrac}{25}{0.970143} \pgf@def{cosfrac}{26}{0.967823} \pgf@def{cosfrac}{27}{0.965429} \pgf@def{cosfrac}{28}{0.962964} \pgf@def{cosfrac}{29}{0.960429} \pgf@def{cosfrac}{30}{0.957826} \pgf@def{cosfrac}{31}{0.955157} \pgf@def{cosfrac}{32}{0.952424} \pgf@def{cosfrac}{33}{0.949629} \pgf@def{cosfrac}{34}{0.946773} \pgf@def{cosfrac}{35}{0.943858} \pgf@def{cosfrac}{36}{0.940887} \pgf@def{cosfrac}{37}{0.937862} \pgf@def{cosfrac}{38}{0.934784} \pgf@def{cosfrac}{39}{0.931655} \pgf@def{cosfrac}{40}{0.928477} \pgf@def{cosfrac}{41}{0.925252} \pgf@def{cosfrac}{42}{0.921982} \pgf@def{cosfrac}{43}{0.918669} \pgf@def{cosfrac}{44}{0.915315} \pgf@def{cosfrac}{45}{0.911922} \pgf@def{cosfrac}{46}{0.90849} \pgf@def{cosfrac}{47}{0.905024} \pgf@def{cosfrac}{48}{0.901523} \pgf@def{cosfrac}{49}{0.89799} \pgf@def{cosfrac}{50}{0.894427} \pgf@def{cosfrac}{51}{0.890835} \pgf@def{cosfrac}{52}{0.887217} \pgf@def{cosfrac}{53}{0.883573} \pgf@def{cosfrac}{54}{0.879905} \pgf@def{cosfrac}{55}{0.876216} \pgf@def{cosfrac}{56}{0.872506} \pgf@def{cosfrac}{57}{0.868777} \pgf@def{cosfrac}{58}{0.865031} \pgf@def{cosfrac}{59}{0.861269} \pgf@def{cosfrac}{60}{0.857493} \pgf@def{cosfrac}{61}{0.853704} \pgf@def{cosfrac}{62}{0.849903} \pgf@def{cosfrac}{63}{0.846092} \pgf@def{cosfrac}{64}{0.842271} \pgf@def{cosfrac}{65}{0.838444} \pgf@def{cosfrac}{66}{0.834609} \pgf@def{cosfrac}{67}{0.83077} \pgf@def{cosfrac}{68}{0.826927} \pgf@def{cosfrac}{69}{0.82308} \pgf@def{cosfrac}{70}{0.819232} \pgf@def{cosfrac}{71}{0.815383} \pgf@def{cosfrac}{72}{0.811534} \pgf@def{cosfrac}{73}{0.807687} \pgf@def{cosfrac}{74}{0.803842} \pgf@def{cosfrac}{75}{0.8} \pgf@def{cosfrac}{76}{0.796162} \pgf@def{cosfrac}{77}{0.792329} \pgf@def{cosfrac}{78}{0.788502} \pgf@def{cosfrac}{79}{0.784682} \pgf@def{cosfrac}{80}{0.780869} \pgf@def{cosfrac}{81}{0.777064} \pgf@def{cosfrac}{82}{0.773268} \pgf@def{cosfrac}{83}{0.769481} \pgf@def{cosfrac}{84}{0.765705} \pgf@def{cosfrac}{85}{0.761939} \pgf@def{cosfrac}{86}{0.758185} \pgf@def{cosfrac}{87}{0.754443} \pgf@def{cosfrac}{88}{0.750714} \pgf@def{cosfrac}{89}{0.746997} \pgf@def{cosfrac}{90}{0.743294} \pgf@def{cosfrac}{91}{0.739605} \pgf@def{cosfrac}{92}{0.735931} \pgf@def{cosfrac}{93}{0.732272} \pgf@def{cosfrac}{94}{0.728628} \pgf@def{cosfrac}{95}{0.724999} \pgf@def{cosfrac}{96}{0.721387} \pgf@def{cosfrac}{97}{0.717792} \pgf@def{cosfrac}{98}{0.714213} \pgf@def{cosfrac}{99}{0.710651} \pgf@def{cosfrac}{100}{0.707107} \endinput