[Edu-sig] number-line graphics for teaching arithmetic

Kirby Urner pdx4d@teleport.com
Thu, 28 Dec 2000 23:34:06 -0800


Hi Fred --

Your number line program sounds like fun -- especially for
the person learning a programming language.  For a 7 year 
old, it might be just as instructive to use felt pens or 
colored pencils though.

As mentioned at my "Getting Inventive with Vectors" at 
http://www.inetarena.com/~pdx4d/numeracy1.html , I like to 
go for a more complete vector concept, and not make the number 
line too front and center initially.  Space first, planes 
and lines second, is my approach (take freedoms away later, 
but start with what's most familiar and real i.e. volume).

The way the curriculum is now, we associate numbers with 
lengths, and then take this away later, saying you need 
vectors to extend in space, whereas the real numbers only 
*scale* vectors (are not independently geometric).

So to kids, it seems like real numbers start out acting like 
vectors, but then vectors come along and start doing the 
number line thing like they've already been doing -- but 
now using this new terminology.  Confusing.  Recapitulates 
the historical sequence (Euclid -> Grassmann) more than 
presents a coherent conceptual logic.[1]

The idea of translating a pencil through space without rotation 
should be communicable to a 7 year old.  If it slides around 
in space without change in orientation, that's what we call 
translation (I bet with whole body movements the idea of 
motion without rotation would get across -- e.g. have kids 
slide across the room without changing the direction they're 
facing).

So you have a bunch of these pencils pointing in various directions 
(various lengths too, if you like), and you get to slide them 
anywhere so long as you don't change direction.  Put them 
tip-to-tail and that's what we mean by "adding the pencils" 
(or call them arrows -- then it's just a short step to "vectors" 
-- as a key term).

Here, a computer could be helpful, giving a graphical notion
of different segments adding up tip-to-tail.  It's hard to hold a
lot of pencils in space.  Pictures help.

You could talk about a swimming sea turtle that swallowed a die 
(random chooser device).  At each turn to play, it could pick 
any of the (6) plus/minus XYZ vectors and move in that direction, 
with each hop being a segment (a tail-to-tip interval corresponding
to a pencil in the above discussion):

 >>> import turtles, povray, functions     # Python 101 modules
 >>> myfile = povray.Povray("ocean.pov")   # open a povray file
 >>> seaturt = turtles.Turtle(turtles.xyzrays(),myfile) # xyz freedoms
 >>> seaturt.randomwalk(10)          # take 10 random hops
 >>> functions.xyzaxes(myfile,3)     # add xyz axes to picture
 >>> myfile.close()                  # close file 
 >>> myfile.render()                 # render (or do it manually)

Result: http://www.inetarena.com/~pdx4d/ocn/graphics/ocean.gif
(notice how the turtle back-tracks at one point).

Because these kids start in space, they already know what a 
tetrahedron and an icosahedron are too, and so you can intelligibly
have your turtle swim in one of the 4 directions defined by the 
tetrahedron's 4 vertices (or one of the icosahedron's 12). 
The turtles.py module already defines tetrays and icorays 
for this purpose.

See "Random Walks in the Matrix": 
http://www.inetarena.com/~pdx4d/ocn/numeracy3.html

Once a fully spatial sense is developed, THEN I'd reduce it to 
a single line on which you can only point left or right (or whatever 
we call the two directions (your left or my left?)).  I do it 
this way because I think space/volume is actually more natural 
and easier to understand than these artificially constrained 
"number line" domains.

At this number line level, with degrees of freedom highly 
(artificially) restricted, you could, if you wanted, do some 
simple programming.  Maybe with slightly older kids.  

For example (the methods in action):

 >>> a = arrow(10)
 >>> b = arrow(-5)
 >>> c = arrow(8)
 >>> d = arrow(-3)
 >>> e = arrow(9)
 >>> aprinter([a,b,c,d,e])
  10  ---------->

  -5  <-----

   8  -------->

  -3  <---

   9  --------->

 Result  19 
 >>> aprinter([a,c,d,d])
  10  ---------->

   8  -------->

  -3  <---

  -3  <---

 Result  12 

=========================
Simple source code behind the above:

def arrow(n):
    line=''
    if n<0:  line = '<'
    line+=abs(n)*'-'
    if n>0:  line += ">"
    line += '\n'
    return (n,line)
    
def aprinter(arrows):
    sum = 0
    for a in arrows:
	print "%#3i  %s" % a
	sum += a[0]
    print "Result %#3i " % sum


[1]
http://www.maths.utas.edu.au/People/dfs/Papers/GrassmannLinAlgpaper/node1.html