Turning math into pictures l.jpg
Advertisement
This presentation is the property of its rightful owner.
1 / 60

Turning Math into Pictures PowerPoint PPT Presentation

Turning Math into Pictures John Peterson Yale University http://haskell.org/edsl Welcome! You’ll need to know a few things for this session: Math: coordinates on a plane, functions, graphs Computers: using Windows and editing text files

Download Presentation

Turning Math into Pictures

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Turning math into pictures l.jpg

Turning Math into Pictures

John Peterson

Yale University

http://haskell.org/edsl


Welcome l.jpg

Welcome!

You’ll need to know a few things for this session:

  • Math: coordinates on a plane, functions, graphs

  • Computers: using Windows and editing text files

    If you don’t have much experience with these things please pair up with a more experienced student!


Making pictures l.jpg

Making Pictures

We will make pictures by writing computer programs that turn basic mathematics into pictures. Our goal is for each student (or team) to make three pictures. We will place these on a web page for everyone to see when this session is over.

Please ask questions at any time!


Using pan l.jpg

Using Pan#

As I talk I will show you sample picture programs. I’d like you to run these yourself as I’m talking so you won’t fall asleep. And you can also change these programs a little bit to see what happens or fiddle with the controls if you’re bored.

Let’s see how to run and edit a program.


Displaying a picture l.jpg

Displaying a Picture

All you need to do is open (click on) a .pan file to view the picture it describes. Please look in the folder “pictures” on your desktop and click on the picture labeled “01-welcome”

Note that there are controls which govern the picture. Play with these a little.

Now save the picture on your disk with the “save as” selection on the File menu.


Writing a program l.jpg

Writing a Program

Now, let’s write a program to make a picture. Use the text editor and write the following:

picture (r @ a) =

if even(r/10) then white else green

Save this in the file test.pan


Running a program l.jpg

Running a Program

To run a program, open (double click) the test.pan file. What happens when you run this program?

If you make any mistakes entering the program you’ll get a message when you open it. You should go back to the editor to fix the problem, close the window with the message, and try again.


Demos l.jpg

Demos

When I have an image on a slide or some code that has a file name under it you will find that file in the “pictures” directory. You can run the demo while I’m talking to see what happens

02-star.pan


Extending a language l.jpg

Extending a Language

You already know two languages: English and Mathematics.

We want to have a language that includes Mathematics and pictures too.

Let’s think about how we extend (add new words to) English to see how we can extend Mathematics.


What s this mean l.jpg

What’s this mean?

“Fred gave me his zax”


What s this mean11 l.jpg

What’s this mean?

“Fred gave me his zax”

I’m stumped too! So what should we do?


Looking up a new word l.jpg

Looking up a new word…

“Fred gave me his zax”

From a dictionary:

n. a tool similar to a hatchet, used for cutting and dressing roofing slates.


Building language l.jpg

Building Language

Aha! We can make a language bigger by giving definitions to new words. The new word is a name for some new concept.

Mathematicians use definitions to create new words (names) all the time.

These definitions express new words in terms of ones you already know.


Computer languages l.jpg

Computer Languages

A computer language is just like any other language except a computer knows what you’re saying.

Computers are very fussy! If you write down something that’s wrong (bad spelling, misplaced punctuation, total nonsense) it will complain.


Functions l.jpg

Functions

One more thing: definitions often are parameterized. That is, they contain names that are “filled in” when the definition is used. Such a definition is a function.

Definition: the midpoint of a line between points A and B is a point on the line, C, such that the distance from A to C is the same as the distance from B to C.


Notation l.jpg

Notation

The computer wants you to write down definitions in a very particular way:

name parameters = body

pi = 3.14159

increment x = x + 1

plusTwo x = increment (increment x)

midpoint a b = (a + b)/2

We don’t use parenthesis for function calling;

f x instead of f(x)


Types and logic l.jpg

Types and Logic

There are a lot of ways to “mess up” in a language:

Typing Mistakes: Fred ga?ve mehis z.ax

Illogical sentences:

“Have a zax day!”

Since zax is a noun this doesn’t make sense.

Mathematicians use logic to tell whether a sentence is gibberish or OK.

Types (like “noun”) describe a set of objects.

I’m sure the computer will occasionally complain about the syntax or types in your programs. Logic will help us understand things better.


About pan l.jpg

About Pan#

A program is like a dictionary. It is a set of definitions, each starting in the leftmost column, in any order you want.

There is a built-in vocabulary that you use to build new definitions

A program must define the name “picture” so that when you run it the viewer knows what you want to see.


Everything is a function l.jpg

Everything is a Function

Functions can be used to represent all sorts of things.

We’re going to use functions to represent pictures.

Every function has a domain (sorts of things that “go in” to the function) and a range (sorts of things that “come out” of the function.

For pictures, our domain is (a piece of) the coordinate plane and our range is colors. That is, a picture is something that tells you “if you look here, you’ll see this color”


Coordinates l.jpg

Coordinates

A coordinate is something that “points to” a place on the plane. A coordinate is like a house address - it tells you how to find a place.

Coordinate systems have an origin - a point in the center of the plane from which other points are located.


Rectangular coordinates l.jpg

Rectangular Coordinates

Rectangular coordinates are written as (x,y), where x is the projection of the point onto the x axis and y is the projection of the point onto the y axis.

y

P (4,2)

2

4

x


Polar coordinates l.jpg

Polar Coordinates

There is another way to express coordinates on the plane: polar coordinates. These use a distance, d, and a direction, angle, to locate a point from the origin.

d

angle

We write this as (d @ angle) in our language. The angle is measured in radians - these are sort of like degrees except they go from 0 to 2p (or -p to p)


Some questions l.jpg

Some Questions

If you are standing at the origin of the coordinate system and someone told you to go to (x,y) how would you go there?

What if they told you to go to (d @ a)?


Coordinates in pan l.jpg

Coordinates in Pan#

The usual coordinate system in Pan# uses “pixels” (those little dots that make up your display) to measure distance. The origin is in the center of the display window.

You can see these two coordinate systems in action in your demos:

03-rectangular.pan

04-polar.pan


Slide25 l.jpg

Colors

We describe colors using 3 numbers, each between 0 and 1

Amount of Red

Amount of Green

Amount of Blue

Example: Yellow = Red + Green rgb 1 1 0

Play with colors a minute using

05-showColor.pan to see what a color looks like


A picture l.jpg

A Picture!

We can define a simple picture like this:

picture(d @ a) =

if d < 50 then black

else white

What will this picture look like?

The “if - then - else” allows you to choose one of two colors


An interactive picture l.jpg

An Interactive Picture!

r <- slider “Select r” (0,100) 50 picture(d @ a) =

if d < r then black

else white

The “slider” allows you to see how the picture changes as “r” changes.

06-icircle.pan


Regions l.jpg

Regions

A region is a function that tells you whether a point is in the region or not.

So the circle in the last example is a region. You could write this as

circ (d @ a) = d < r

picture p =

if circ p then black else white

We’ll separate the program into regions and a “region painting” function.


Regions29 l.jpg

Regions

A region is a function that tells you whether a point is in the region or not.

So the circle in the last example is a region. You could write this as

circ (d @ a) = d < r

picture p =

if circ p then black else white

We’ll separate the program into regions and a “region painting” function.

A region


Regions30 l.jpg

Regions

A region is a function that tells you whether a point is in the region or not.

So the circle in the last example is a region. You could write this as

circ (d @ a) = d < r

picture p =

if circ p then black else white

We’ll separate the program into regions and a “region painting” function.

Painting the region


Striping l.jpg

Striping

We want to draw stripes! Let’s control

  • Distance between stripes (pixels)

  • Width of the stripe (fraction)

    We need a special function to do this:

    floor(x) is the greatest integer less that x.

    floor (2.34) = 2

    floor (9.99) = 9

    floor (-0.1) = ???


Striping32 l.jpg

Striping

We compute the fractional part of x/width. Where is this 0?

frac x = x - floor x

stripes width size x = frac ((x + width/2)/width) < size

p <- slider "Distance between stripes" (0, 100) 20

w <- slider "Stripe width (fraction)" (0,1) 0.5

picture (x,y) =

if stripes p w x then black else white

07-stripes.pan


Combining regions l.jpg

Combining Regions

We can make functions that glue regions together in different ways.

How would you make a function that forms the union of two regions?


Region union l.jpg

Region Union

A point “p” is in the union of r1 and r2 if it is in r1 or r2.

orRegion r1 r2 =

\p -> r1 p || r2 p

Don’t worry if this seems hard to follow!

We won’t have to write functions to do things with regions - they are already defined for you.

this is “or”

region looks here


Region functions l.jpg

Region Functions

Here are the built-in regions functions:

andRegion: points in both regions

orRegion: points in either region

xorRegion: points in just one region

rMinus: points in the first but not

the second region

invertRegion: points outside a region


Combining regions36 l.jpg

Combining Regions

Let’s take the functions like “orRegion” out for a test drive …

vstripes (x,y) = stripes 20 0.3 x

hstripes (x,y) = stripes 20 0.3 y

circ (d @ a) = d < 70

r = orRegion vstripes hstripes

picture p = if r p then black else white

08-orRegion.pan


Combining regions37 l.jpg

Combining Regions

Some more regions to try … you can remove the -- in front of these lines to test them.

r = andRegion vstripes hstripes

r = xorRegion vstripes hstripes

r = invertRegion circ

r = rMinus vstripes circ

09-andRegion.pan

10-xorRegion.pan

11-invertRegion.pan

12-rMinus.pan


Polar stripes l.jpg

Polar Stripes

Striping in polar coordinates is pretty cool! What do you think these regions look like?

r (d @ a) = stripes 20 0.3 d

r (d @ a) = stripes (2*pi/20) 0.5 a

13-circles.pan

14-pies.pan


Fancy painting l.jpg

Fancy Painting

There’s no need to just use black and white. Paint with any color you want. Paint more than one region. Use rgb to make exotic colors. Here’s an example:

r1 (x, y) = stripes 40 0.3 x

r2 (x, y) = stripes 40 0.3 y

r3 (d @ a) = stripes 25 0.7 d

r4 = orRegion r1 r2 -- the whole grid

r5 = andRegion r1 r2 -- the intersections

c1 = rgb 1 0.9 0 -- yellowish orange

picture p =

if r5 p then blue else

if r4 p then red else

if r3 p then c1 else white

15-paint.pan


Moving regions l.jpg

Moving Regions

We can move regions around! This function takes a region and shifts its center to a new point:

moveR (xc,yc) r =

\(x,y) -> r (x-xc, y-yc)

Read this as “point (x,y) is in the moved region if point (x-xc,y-yc) is in the original region.”


Op art l.jpg

Op Art

Here’s a program with interference patterns:

d <- slider “Distance” (0, 50) 20

circles (d @ a) = stripes 10 0.5 d

twoCircles = orRegion

circles

(moveR (d, 0) circles)

picture p = if twoCircles p then black

else white

16-opart.pan


Activity 1 l.jpg

Activity 1

Make a picture using regions. Here are some ideas:

  • Make some fancy regions by combining the simple ones we’ve seen in new ways.

  • Think of new ways to define regions. Can you make squares or diamonds or ovals?

  • What happens when you stripe something like (x+y) or (x*x)?

  • Use many different colors to paint your regions.

  • Use rgb to make fancy colors

  • Move some regions around to create interference patterns

  • Use sliders!


Fades l.jpg

Fades

We’re going to try something with animations now! A fade turns one picture into another. You see a lot of these in TV and the movies. We’ll make fades that last exactly 1 second.

To make things easy the two pictures will always be in the square between -1 and 1.


Region based fading l.jpg

Region Based Fading

We can simplify the problem by using a region to control the fade. This region should not touch the square at t=0 and cover the entire square at t=1.

r t (x,y) = x < 2*t-1

picture <- fadeRegion r

17-simplefade.pan

Evaluate the region at t = 0 and t = 1 to make sure

things work right!


Blinds l.jpg

Blinds

Let’s reuse our stripes function to

make a fade:

r t (x,y) = stripes 0.1 t x

picture <- fadeRegion r

18-stripedfade.pan

Check the region at t=0 and t=1 to make sure!


Interpolation l.jpg

Interpolation

Fading is a form of interpolation. In general, interpolation takes two objects and a number between 0 and 1 and returns an object between the two endpoints.

We can use the following built-in interpolations:

interpolateC t color1 color2

interpolateN t number1 number2

interpolateP t point1 point2

What is the formula for interpolateN?

That first example could be rewritten as

r t (x,y) = x < interpolateN t (-1) 1


Color interpolation l.jpg

Color Interpolation

We can interpolate colors directly. This should be very familiar!

fader im1 im2 t p =

interpolateC t (im1 p) (im2 p)

picture <- fadeImage fader

19-colorfade.pan


Another fader l.jpg

Another Fader

Here’s a “head scratcher”! Can you figure it out?

fader im1 im2 t (x,y) =

if abs x > t || abs y > t then

im1 (x,y) else

im2 (x/t, y/t)

20-squeezer.pan

Note: abs x is the distance to the origin

|| is “or”


Activity 2 l.jpg

Activity 2

Write your own fader. Some ideas:

Use an interesting region based on polar coordinates

Use two different kinds of interpolation

Use point interpolation to move a region

Use color interpolation to soften the

edge of a region

Intersect regions that are formed by lines.

Change the rate of time flow


Funny faces l.jpg

Funny Faces

We can use functions to alter a picture from your disk. This “outside” picture is a function just like the ones that you display. This program just displays the selected picture:

thePicture <- image “Select a picture”

picture = thePicture

21-picture.pan


Moving the picture l.jpg

Moving the Picture

We’ll want to move the picture around a little to see what happens as it moves. If you use “getPicture” the image comes with a bunch of controls:

thePicture <- getPicture “Select a picture”

picture = thePicture

22-picturecontrol.pan


Changing the picture l.jpg

Changing the Picture

Now that we have a picture, we can change it if we want. Here’s a really simple way to change a picture: add a mirror:

thePicture <- getPicture “Select a picture”

picture (x,y) = if x > 0 then thePicture (x,y)

else thePicture (-x, y)

23-mirror.pan


Transformations l.jpg

Transformations

We can use any transformation that scrambles the points in a picture! In general, these transformations give you a new place to look in the picture at each point.

Here are some transfomers:

moveIt (x,y) = (x+1, y+1)

What is moveIt (2,3)?

twistIt (x,y) = (y, -x)

What is twistIt (2,3)


Visualizing transformations l.jpg

Visualizing Transformations

What we’re doing is using a transformation as a lens which distorts an image.

Here’s a transformation:

f (x,y) = (x*x, y*y)

f (0,0) = (0,0)

f (1,1) = f(-1,1) = f(1,-1) = f (-1,-1) = (1,1)

f (2,2) = (4,4)

So, if we look at (2,2) we’ll see what’s at (4,4)


Domains and ranges l.jpg

Domains and Ranges

The domain of a function is the inputs over which it is defined. The range is the set of possible outputs.

A lens makes the domain and range visible.

The domain of the lens function should be the entire plane - otherwise there are places we can’t look!

The range tells you what part of the incoming image is visible. What is the range of the mirror lens?


A radial transformation l.jpg

A Radial Transformation

Lets look at transformations that alter only the distance from the origin. That is, something like

lens (d @ a) = (f(d) @ a)

for some function f. Suppose f(d) = d*d - what will happen?

This is called a

Parabola


Hi big nose l.jpg

Hi, Big Nose!

What’s the relationship between the parabola and the way the picture is changed?

The “100” keeps the picture from getting too small.

thePicture <- getPicture “Select a picture”

picture (d @ a) = thePicture (d*d / 100 @ a)

24-bignose.pan

Think about the slope of the parabola!


Swirling l.jpg

Swirling

This transformation adds extra rotation as points

move out from the origin

f (d @ a) = (d @ a + k * d)

We can adjust k with a slider and watch how the

picture changes.

25-swirly.pan


Altering the distance l.jpg

Altering the Distance

We’ll use a function that moves things in or out depending on the angle. We’ll use a point that is rotated a multiple of the current angle to decide how much to change the distance.

picture (d @ a) = thePicture ( bumps d a @ a )

bumps d a = d * bumper (1 @ a*n)

bumper (x,y) = 1 + k * x

26-bumps.pan

This one takes some deep thinking! Look at what

happens when k is 0.


Activity 3 l.jpg

Activity 3

  • Make a “funny face” using some of the picture warping functions we have explained.

  • Make something humorous and fun - not disgusting! You shouldn’t do anything that you wouldn’t want someone else to do to a picture of you.

  • Here are some ideas:

  • Try more than one mirror

  • Change the function used in radial distortion

  • Combine two or three different distortions

  • Use “if then else” in your functions

  • Try square roots (sqrt)


  • Login