summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lapdf/turtle.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/lapdf/turtle.tex')
-rw-r--r--macros/latex/contrib/lapdf/turtle.tex90
1 files changed, 90 insertions, 0 deletions
diff --git a/macros/latex/contrib/lapdf/turtle.tex b/macros/latex/contrib/lapdf/turtle.tex
new file mode 100644
index 0000000000..88c4720427
--- /dev/null
+++ b/macros/latex/contrib/lapdf/turtle.tex
@@ -0,0 +1,90 @@
+% ---------------------------------------------------------------------------
+% Draws turtle graphics in pdfTeX with Lapdf. The procedures are taken
+% from Abelson's introductory book for object logo on the Macintosh.
+% ---------------------------------------------------------------------------
+\input preamble.tex
+
+\newcount\i
+\newcount\pen
+\newdimen\a
+\newdimen\b
+\newdimen\t
+\newdimen\dir
+\newdimen\ax
+\newdimen\tx
+\newdimen\ty
+\newdimen\ux
+\newdimen\uy
+
+% ---------------------------------------------------------------------------
+% This is a simple Lapdf implementation of turtle graphics. The commands
+% are: Initturtle, Home, Penup, Pendown, Forward, Back, Right, Left.
+% ---------------------------------------------------------------------------
+\def\Home{\Moveto(0,0)}
+\def\Penup{\pen=0}
+\def\Pendown{\pen=1}
+
+\def\Initturtle{\Home \col=-1 \Dset(\dir,0) \Setwidth(0.02) \Pendown}
+
+\def\Forward(#1){\Dset(\ax,#1) \Rad(\Np\dir,\ty)
+ \Sin(\Np\ty,\tx) \Dmul(\tx,\ax) \Add(\ux,\tx)
+ \Cos(\Np\ty,\tx) \Dmul(\tx,\ax) \Add(\uy,\tx)
+ \ifnum\pen=0 \Moveto(\Np\ux,\Np\uy) \else \Lineto(\Np\ux,\Np\uy) \fi}
+
+\def\Back(#1){\Dset(\ax,#1) \Rad(\Np\dir,\ty)
+ \Sin(\Np\ty,\tx) \Dmul(\tx,\ax) \Sub(\ux,\tx)
+ \Cos(\Np\ty,\tx) \Dmul(\tx,\ax) \Add(\uy,\tx)
+ \ifnum\pen=0 \Moveto(\Np\ux,\Np\uy) \else \Lineto(\Np\ux,\Np\uy) \fi}
+
+\def\Right(#1){\Dset(\ax,#1) \Add(\dir,\ax) {\Dmod(\dir,360)}}
+\def\Left(#1){\Dset(\ax,#1) \Sub(\dir,\ax) {\Dmod(\dir,360)}}
+
+% ---------------------------------------------------------------------------
+% These are our own special drawing macros.
+% ---------------------------------------------------------------------------
+\def\Arcleft(#1,#2){\i=0 \Dset(\t,#1) \Dmul(\t,0.017453pt)
+ \Whilenum{\i<#2}{\Forward(\Np\t) \Left(1) \Add(\i,1)}}
+
+\def\Arcright(#1,#2){\i=0 \Dset(\t,#1) \Dmul(\t,0.017453pt)
+ \Whilenum{\i<#2}{\Forward(\Np\t) \Right(1) \Add(\i,1)}}
+
+\def\Fullcirc(#1){{\Arcright(#1,360)} \Stroke}
+
+\def\Square(#1){\i=0
+ \Whilenum{\i<4}{\Forward(#1) \Right(90) \Add(\i,1)} \Stroke \Home}
+
+\def\Rosette(#1,#2){\i=0 \Dset(\t,360) \Div(\t,#2)
+ \Whilenum{\i<#2}{\Nextcol(0,23) {\Square(#1)} \Right(\Np\t) \Add(\i,1)}}
+
+\def\Petal(#1){\Arcright(#1,60) \Right(120) \Arcright(#1,60)
+ \Right(120) \Stroke \Home}
+
+\def\Flower(#1){\i=0
+ \Whilenum{\i<6}{\Stepcol(0,23,4) {\Petal(#1)} \Right(60) \Add(\i,1)}}
+
+% ---------------------------------------------------------------------------
+\begin{document}
+\unitlength1.25cm
+
+\begin{center}
+{\Huge\bf{Turtle Graphics with \Lapdf}}
+\bigskip
+
+\begin{lapdf}(9,9)(-4.5,-4.5)
+ \Initturtle
+ \Rosette(3,24)
+ \Initturtle
+ \Penup
+ \Forward(4.243)
+ \Right(90)
+ \Pendown
+ \Dgray
+ \Fullcirc(4.243)
+\end{lapdf}
+
+\begin{lapdf}(9,9)(-4.5,-4.5)
+ \Initturtle
+ \Flower(5)
+\end{lapdf}
+\end{center}
+\end{document}