If you want to work along with this material we suggest using the MSW Logo environment. It is freely available.
We can use Logo commands to tell the turtle how to move.
There are two basic turtle movement commands:
forward 100 backward 100You can use any number of steps you like. You can also abbreviate commands, e.g.,
forward
as fd
and
backward
as bk
.
We can tell the turtle to turn. We ask it to turn
either right or left and
tell it how far to turn in terms of degrees. There are 360 degrees
in a circle so we tell the turtle to turn between 1 and 360 degrees.
right 90 left 90You can also abbreviate commands, e.g.,
right
as rt
and
left
as lt
.
Sometimes we want to start over on a clean screen the command for this is.
cs
(clearscreen)
Try This!
Type in a sequence of commands to draw a square
Sometimes you will give some commands and then find yourself
typing them in again and again. Logo lets you save some typing by
repeating a group of commands.
repeat 5 [fd 70 rt 72]
You can repeat any number of times and use any list of commands
inside the [
and ]
Try This!
Can you figure out what the repeat
command above will draw?
Type it in and see.
Normally as the turtle moves it leaves a trail. You can change the
color of the trail, called the pen.
In Logo there are lots of possible pen colors that the turtle can use.
Colors are defined by numbers. black
is number 0 and
the numbers for more interesting colors are:
setpencolor
command, for example:
setpencolor 14
Try This!
Type in a setpencolor
command and
then repeat
command above to draw a your favorite
colored shape
You can also move the turtle without it leaving a trail.
The penup
and pendown
commands tell the
turtle to raise and lower the pen respectively.
For example, you can draw parallel line segments with this simple
sequence of comands:
forward 100 penup right 90 forward 10 right 90 pendown forward 100
Try This!
Use in the penup
, pendown
,
setpencolor
and repeat
commands
to draw a dashed green line.
If we've made a nice picture we might want to hide the turtle to get a better
view.
ht
(hideturtle)
st
(showturtle)
Lots of times our commands are made up of repeating patterns.
An AB pattern alternates between two different parts.
Here is one in Logo:
fd 100 rt 90
Here is an ABC pattern in Logo:
fd 100 bk 100 rt 5
We just use a repeat
command to repeat our patterns.
Try This!
Can you tell what this command will do?
repeat 4 [fd 100 rt 90]
How about this one?
repeat 72 [fd 100 bk 100 rt 5]
You may want to refer to the number of times the pattern has been
repeated inside of the pattern. This can be done by
using the repcount
command.
Since Logo is a computer programming language it has commands to perform mathematical operations:
2 * 3 = 8 - 2 8 / 2 = 2 + 2You can use commands in place of numbers in these mathematical operations.
Try This!
Can you tell what this command will do?
repeat 10 [fd repcount * 10 rt 90]
Can you change it so that each "edge" has a different color?
Try to draw some simple polygons using turtle commands. You can do this by repeating the simple pattern of "draw edge"-"turn right", for example:
trianglesrepeat 3 [fd 100 rt 120]
squares
repeat 4 [fd 100 rt 90]
pentagons
repeat 5 [fd 100 rt 72]
Try This!
How are these different?
How are they the same?
Can you find a general pattern that each of these is a special case of?
hint: use a name like "x" in place of a number and try to calculate the other numbers in terms of "x"
We can make up our own commands. It saves typing and lets us
experiment with different patterns easily.
Instead of typing repeat 4 [fd 100 rt 90]
for a square every time. We can define a new command:
to square100
repeat 4 [fd 100 rt 90]
end
Now we just give the square100
command.
Here's one for general "regular" polygons of different sizes and colors:
to poly :sides :length :color setpencolor :color repeat :sides [fd :length rt 360/:sides] end
This command takes numbers as an input, much like the forward
command takes the distance to move the turtle. In the case of a command
that we define, however, we can decide how to use the input value.
These input values are always named with a ":" as their starting character.
Now we can run it as, for example,
poly 4 100 0to draw our black square with sides 100, but we can also run it as:
poly 5 70 14to draw an orange pentagon.
Try This!
The file poly.lgo has the poly
(and
other interesting commands that you can explore). Click this link
and download the file to your machine (e.g., to your desktop).
To load a file, click in the turtle's window, pull down the file menu and select load. You can then select the file you downloaded (e.g., to your desktop) to load into the logo environment.
You can make interesting images by rotating geometric objects.
One simple way is to spin the turtle around a point and draw
a number of polygons (indicated by the :steps
input in
the following).
to spin :sides :length :steps repeat :steps [poly :sides :length 0 rt 360/:steps] endTry
spin 10 30 20and
spin 3 80 10for a start and experiment with others.
If you want to, try to modify the spin
command to change
the color of the polygon as well.
When you look at a tree you see a trunk, some branches, and leaves growing of off the branches.
Say you cut off a branch and push the cut end into the ground. Does it look like a tree?
What is the same? What is different?
Have a look at these trees and these branches. Notice any patterns?
A fractal is a shape that has a repeating pattern, but where occurrences of the pattern change in location and size (often times getting smaller). Mathematicians, scientists, and artists are all interested in the study of fractals.
Try This!
Look here for a wide variety of fractals. I particularly like the Natural Fractals.
Trees can be thought of as fractals. The thick trunk leads to thinner branches, in turn each branch can be thought of as a trunk leading to thinner branches.
A very simple tree "shape" can be drawn by the following series of Logo commands. Anything written after a ";" is a comment for you to read, but the computer will ignore it so you don't have to type it in.
fd 20 ; draw the trunk lt 30 ; draw the left branch fd 14 bk 14 ; back up to the branch point rt 60 ; draw the right branch fd 14 bk 14 ; backup to the branch point lt 30 bk 20 ; back up to the trunk's baseIf you type this in it won't look much like a tree, but this will serve as the basic "fractal" pattern for our trees.
Fractals are programmed in a computer using the idea of recursion. In recursion, we define a command in terms of itself. It seems odd at first, but it is really quite natural. Study this command for drawing a tree trunk and you'll see the idea:
to trunk :size if :size < 5 [stop] fd :size lt 30 trunk :size * (7/10) rt 60 trunk :size * (7/10) lt 30 bk :size endIt looks very similar to the command sequence we gave above, except that we use the
trunk
command itself to draw the left and right
branches. We make the branches smaller than the trunk by multiplying
their size by 7/10
. Each time we call trunk
we create a smaller branch, until the size of the "trunk" is less
than 5
at which point we stop and return to construct
the other branches of the tree.
Try This!
The file tree.lgo has lots of interesting
tree commands including trunk
Try drawing different tree trunks by giving different inputs.
Trees, and fractals in general, aren't perfectly symmetric like our tree trunks, for example, some times there is a big branch going off the the left and no branch on the right (it may have been blown off in a storm).
We can simulate the seemingly random effects of nature on
the shape of a tree using Logo's random
command.
random
takes a number as input and then randomly
selects a number between zero and that number (think of it as
rolling dice an returning the number showing on the dice).
When you run the random
command with the same number
multiple times it can produce different numbers (!!). For example,
random 5 = 3 random 5 = 2 random 5 = 4 random 5 = 3We use this to vary the size of branches as follows:
to rantrunk :size if :size < 5 [stop] fd :size lt 30 rantrunk :size * ((5 + (random 4))/10 rt 60 rantrunk :size * ((5 + (random 4))/10 lt 30 bk :size endThis simple change to the way we reduce the size of the branches has a large effect on the shape of the tree.
Try This!
Run the rantrunk
command several times (clearing the screen)
between each run to see how the shape changes.
Change sizes some to see how the shape changes.
Now run the command several times without clearing the screen. See how the overlapping trees produce a more complex structure. What happens when you vary the sizes?
These trees are looking better, but we would like to make them more realistic by adjusting the thickness of the trunk and branches and adding leaves.
The thickness of the turtle's pen can be set by the setpensize
command. This command takes a list of two numbers that describe the
height and width of the pen. For example,
setpensize [3 3]makes the pen 3 times thicker.
We want the trunk to be thicker and the branches to be succesively smaller as we move up the tree.
Try This!
Look at the thicktrunk
command to see how the size is
varied. Note that when constructing a list using names rather
than numbers, we have to use (se ...)
instead
of [...]
.
How do the thicktrunk
trees look? If you want to
adjust the thickness simply change the :size/6
to
calculate a different fraction of :size
.
Leaves are drawn as an ellipse
that is fill
with
color. They are drawn at the tips of branches by taking advantage
of the fact that our trunk's will stop growing when :size < 5
.
Try This!
Draw some different trees using the tree
command. You
can overlap them if you like and change their size.
If you want to add some fall foliage, try the falltree
command.
list
of three numbers,
each between 0
and 255
, describing
the amount (or intensity) of the red, green, and blue you want. Yellow
is [255 255 0]
.
One way to see the "shading" of a color is by drawing concentric circles changine the shade of each a small amount. Here's an example:
to shadesofyellow repeat 255 [ setpencolor (se 255-repcount 255-repcount 0) circle 255-repcount ] endhere we use
repcount
to get the current repetition. In
addition we use the se
command to build the color list
out of the results of calculations
(you can only use [...]
when you have simple numbers in
the list).
Try This!
The file colors.lgo has shadesofyellow
and a simple rainbow
command.
It's interesting to see how changes to the calculations for the different color amounts (i.e., the red, green and blue) changes the resulting color. If you want to change the command definition go ahead.
You might wish to sign it first. The easiest way to do this is to type:
penup setxy -200 -200 setpencolor 10 pendown rt 90 label [FirstName LastName]
Then go to the bitmap
menu, pull down to print, and select
HP Color
.