Circle in Turtle Geometry
1sep12
\begin{document}
\maketitle
\section{Introduction}
This elementary lesson on Python with turtle geometry motivates the definition
of a circle as a plane curve with constant curvature. It includes a detailed
reading of a Python journal which created this figure.
\section{Python Journaling}
Here is a (somewhat edited) transcript,
circle-journal an immediate mode
Python session. Such a \texti{Python Journal} is a recording of what
was typed and entered into a Python session. You can just follow the
steps in the circle-journal yourself. And you can read the following
lesson if you aren't sure you understand what you're doing.
\subsection{Check your Python}
First, check that your computer has a working Python installation.
Open a command shell and enter the phrase following the dollar sign
in the example below. Python will answer with something like what
is written below the input line, ending with the prompt >>>. You
then enter the phrase following the prompt.
\$ python
Python 2.4.3 (#1, Jan 10 2007, 12:05:23)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
> > > import turtle
There is no response by Python to this lasst command. You have told Python
to use the turtle libraries (in Pythonspeak, this is called the
"turtle module"). If do get a reply from Python here, then Python cannot
find this module. And you cannot continue this lesson, until you install
this module. This means, your current Python needs to be augmented with
software you can obtain elsewhere. But that is another story not told here..
To see the entire "vocabulary" of the turtle-module,
enter the following command. Note that the name \texttt{dir}, which stands
for "directory", is the name of a function, and therefore it must be
followed by the parentheses proper to functional notation in mathematics.
The vocabulary only tells you the names. It does not tell you how to use
these. For example, \texttt{cos} obviously stands for the cosine function, and
so you would type \texttt{cos(42)}. But you still not know whether this cosine
fuction is in degrees or radians. You can find out, but how will be
told later. For the time being, use functions you are told about here.
>>> dir(turtle)
['Error', 'Pen', 'RawPen', 'Tkinter', '__builtins__', '__doc__',
'__file__', '__name__', '_canvas', '_getpen', '_pen', '_root',
'acos', 'asin', 'atan', 'atan2', 'backward', 'ceil', 'circle',
'clear', 'color', 'cos', 'cosh', 'degrees', 'demo', 'down', 'e',
'exp', 'fabs', 'fill', 'floor', 'fmod', 'forward', 'frexp', 'goto',
'heading', 'hypot', 'ldexp', 'left', 'log', 'log10', 'modf', 'pi',
'position', 'pow', 'radians', 'reset', 'right', 'setheading',
'setx', 'sety', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tracer',
'up', 'width', 'window_height', 'window_width', 'write']
It is neither necessary nor advisable to understand all of these. You can,
of course, experiment with any of the words which don't begin with a
double underscore. The ones we're interested for this lesson are
are \texttt{forward, right, reset}.
\texttt{ >>> turtle.forward(50) }
The turtle module now opens a screen on your computer. That is, it invokes
another module called "Tkinter" which "knows" how to draw in the plane.
Moreover, we want to abbreviate the command to something simpler. We can
write an alias for the words, but not for the parentheses. The latter indicate
the the words refer to a function, and the input to the function, in this
case, was 50.
>>> \texttt{ fd = turtle.forward} \n
>>> \texttt{ fd(50) }\n
>>> \texttt{ turtle.right(90)} \n
>>> \texttt{ fd(50)} \n
>>>\texttt{ rt=turtle.righ)} \n
>>> \texttt{ rt(90)} \n
>>> \texttt{ fd(50)} \n
>>> \texttt{ rt(90)} \n
>>> \texttt{ fd(50})
Well, wasn't that fun? But tedious. Let's check the directory for
a nother useful function, one that puts everything back to the beginning.
\texttt{>>> dir(turtle)}
Same output as before.
\texttt{>>> turtle.reset()}
Aha, that's what we want. Let's call it "zap" for short.
>>> \texttt{zap=turtle.reset}
We next "define" our own function to draw a square. We'll call it
\texttt{ square} and we insert a placeholder for the side-length of the square.
The word \texttt{ dis} can be anything you like, but best not to confuse Python
by using one of the words already in its vocabulary.
When you end the line with a colon, Python presents you with another
prompt, the tripple of dots. There you MUST indent a number of spaces.
Although you may, you should ot use (TAB).
Here I used my usual two spaces. One space is too short to see, more
spaces is a waste of effort.
To tell Python you're done writing, enter a blank line. Python will
return to the standard >>> prompt.
\texttt{ >>> def square(dis): }\n
\texttt{ ... \ \ fd(dis) }\n
\texttt{ ... \ \ rt(ang) }\n
\texttt{ ... \ \ fd(dis) }\n
\texttt{ ... \ \ rt(ang) }\n
\texttt{ ... \ \ fd(dis) }\n
\texttt{ ... \ \ rt(ang) }\n
\texttt{ ... \ \ fd(dis) }\n
\texttt{ ... \ \ rt(ang) }\n
\texttt{ ... }\n
\texttt{ >>> square(96) }
Always check that something you've just defined does what you expect it
to do.
We now speed up. Here is a loop. Note that loop counter, a dummy variable
here called "i" because it's easy to type, takes on five values: 0,1,2,3,4.
We do not use it for anything. We just want five loops. Clearly 4 would
have sufficed.
\texttt{ >>> for i in range(5): }\n
\texttt{ ... \ \ fd(dist) }\n
\texttt{ ... \ \ rt(ang) }\n
\texttt{ ... }
Now we are ready to do some serious programming.
\texttt{ >>> zap() }
A polygon has three attributes, number of sides, lenght of side, and
angle.
\texttt{ >>> def poly(nn, dis, ang): }\n
\texttt{ ... \ \ for i in range(nn): }\n
\texttt{ ... \ \ \ \ fd(dis) }\n
\texttt{ ... \ \ \ \ rt(ang) }\n
\texttt{ ... }\n
Can you write out in words what this program does? It's easier to see
it do it, isn't it?
\texttt{ >>> poly(4,96,90) }\n
\texttt{ >>> poly(8,43,45) }\n
You are welcome to double the number of sides, and halve the side
lenght and turning angle. But you'll get a cramp typing. Let's do this:
\texttt{ >>> num=4 }\n
\texttt{ >>> dist=96 }\n
\texttt{ >>> angl=90 }\n
\texttt{ >>> zap() }\n
\texttt{ >>> poly(num,dist,angl) }\n
\texttt{ >>> poly(2*num,dist/2,angl/2) }\n
\texttt{ >>> poly(5*num,dist/5,angl/5) }\n
What's going on here? Write a short essay into your journal on this
experiment.
\section{Mathematics}
Ever since Euclid in the year -300 school children were taught that
a circle is the locus of points equidistant from its center point.
But every child knows that a circle is a curve which is round, like
a wheel. How to reconcile this? The above experiment suggest a way.
Note that in each iteration, although we halve the distance moved, $ds$,
we also halve the angle turned, $d\phi$. Thus the ratio,
$\frac{d\phi}{ds} =$ is kept constant. In the limit, as $ds \rightarrow 0$,
this ratio is called the \textit{ curvature} of the curve along which the
turtle moved. Incidentally, the reciprocal of the curvature, called the
\textit{ radius of curvature} is the, as you might expect, the radius
of the circle.
\end{document}