Nick Thompson

Roger Dannenberg, chair |

Brad Myers |

Andy Witkin |

Ken Kahn, Animated Programs |

- procedural animation
- direct manipulation

- shapes express mathematical relationships
- before-and-after diagrams describe changes of state
- "parallel" execution of rules

**geometry is a useful way to explain a computation**

u = (w · v) · v / ||v||

R = 2 · (L · N) · N - L

H = k · P

L

L

L

R

R

R

L

- geometry is a useful way to explain a computation to people
**why not computers, too?**

Diagrams can be used to represent a wide variety of computer programs as well as or better than traditional languages.

*visual problems*- most important data type is
*position* - most important operation is
*movement* - the simplest movement is translation (vector addition)

- frequently used
- frequently drawn
- too abstract: no base, no position

- triangles can represent rotation and scaling
- similar triangles are used in many geometric proofs

operation |
shape |

- geometry is a useful way to explain a computation to people
- geometry can be used to explain an expression to a computer
**what about control flow?**

- Pictorial Janus

- Cocoa / KidSim

- 3D-Visulan

- geometry is a useful way to explain a computation to people
- geometry can be used to explain an expression to a computer
- you can describe changes in state this way
**what about conditionals?**

- clock ticks
- user input
- collisions
- communication

- presence of a condition indicates "X must be true"
- point in circle:

- stick intersection

- geometry is a useful way to explain a computation to people
- geometry can be used to explain an expression to a computer
- you can describe changes in state this way
- you can describe conditions that must be met to trigger a rule
**programs - algorithms = data structures**

- critters can contain
*links*

- links can be assigned to by connecting them to a critter

- critters are used for composing state
- binary tree node:

two links and no behavior

- geometry is a useful way to explain a computation to people
- geometry can be used to explain an expression to a computer
- you can describe changes in state this way
- you can describe conditions that must be met to trigger a rule
- geometry is also good for describing data structures
**hasn't somebody done this before?**

Sketchpad [Sutherland]

The ability to make moving drawings suggests that Sketchpad might be used for making animated cartoons. |

-- Ivan Sutherland, 1963 |

Geometer [Davis]

Geometer's Sketchpad [Jackiw and Finzer]

- inspiration for geometric computation
- limited to compass/ruler constructions
- not programming languages

Pictorial Janus [Kahn and Saraswat]

ToonTalk [Kahn]

- visual equivalents of concurrent constraint languages
- Pictorial Janus has accidental layout
- ToonTalk can manipulate sprites numerically
- powerful data structures and communication

Cocoa / KidSim [Cypher and Smith]

- grid-based rules - no smooth motion
- uses a calculator for arithmetic

Gamut [McDaniel and Myers]

- similar application area, but for end users
- sophisticated multiple-example inference algorithm:

often unclear what it has learned - deck of cards metaphor for choices

Klik & Play [Maxis]

- commercial video game construction kit
- lots of built-in knowledge, little flexibility

- more like a keyframe animation system
- built-in limited knowledge of directional movement
- extensive use of numerals

- framework for geometric computation
- set of useful shapes
- integration of geometric expressions with programming constructs

- have prototype, written in STk
- stick manipulation and biases work
- rule construction and user input events work
- can build:
- straight-line motion
- parabolic trajectory
- spawning new critters

- examples
- asteroids
- particle system
- bresenham

- user experience

- geometry is a useful way to explain a computation to people
- geometry can be used to explain an expression to a computer
- you can describe changes in state this way
- you can describe conditions that must be met to trigger a rule
- geometry is also good for describing data structures
- this work combines the above in a new and powerful way