Lecture2supp PictureLanguage
Lecture2supp PictureLanguage
Picture
Language
(runes.py)
Need also graphics.py + image2gif.py
Elements of
Programming
1. Primitives
2. Means of Combination
3. Means of Abstraction
Primitive building blocks
show(rcross_bb)
Picture
object
Primitive building blocks
show(corner_bb)
Primitive building blocks
show(sail_bb)
Primitive building blocks
show(nova_bb)
Primitive building blocks
show(heart_bb)
Applying operations
op(picture)
Example:
show(heart_bb)
Primitive Operation:
Rotating to the Right
clear_all()
show(quarter_turn_right(sail_bb))
operation picture
result is a picture
object!
Derived Operation:
Rotating Upside Down
def turn_upside_down(pic):
return quarter_turn_right(
quarter_turn_right(pic))
clear_all()
show(turn_upside_down(
sail_bb))
How about
Rotating to the Left?
clear_all()
def quarter_turn_left(pic):
return
quarter_turn_right(
turn_upside_down(
pic))
show(quarter_turn_left(
sail_bb))
Means of Combination:
Stacking
clear_all()
show(stack(rcross_bb,sail_bb))
Multiple Stacking
clear_all()
show(stack(rcross_bb,
stack(rcross_bb,
sail_bb)))
Placing pictures one beside the
other
def beside(pic1, pic2):
return quarter_turn_right(
stack(
quarter_turn_left(pic2),
quarter_turn_left(pic1)))
clear_all()
show(beside(sail_bb, rcross_bb))
A complex object
clear_all()
show(
stack(
beside(
quarter_turn_right(rcross_bb),
turn_upside_down(rcross_bb)),
beside(
rcross_bb,
quarter_turn_left(rcross_bb))))
Lets give it a name:
make_cross
stack(
beside(
quarter_turn_right(rcross_bb),
turn_upside_down(rcross_bb)),
beside(
rcross_bb,
quarter_turn_left(rcross_bb)))
stack(
beside(
quarter_turn_right(pic),
turn_upside_down(pic)),
beside(
pic,
quarter_turn_left(pic)))
def make_cross(pic):
return stack(
beside(
quarter_turn_right(pic),
turn_upside_down(pic)),
beside(
pic,
quarter_turn_left(pic)))
Naming your objects
clear_all()
my_pic = make_cross(sail_bb)
show(my_pic)
my_pic_2 = make_cross(nova_bb)
show(my_pic_2)
Repeating the pattern
clear_all()
show(make_cross(make_cross(nova_bb)))
Repeating multiple times
clear_all()
def repeat_pattern(n, pat, pic):
if n == 0:
return pic
else:
return pat(repeat_pattern(n-1, pat, pic))
show(repeat_pattern(4, make_cross, nova_bb))
RECURSION
function
Qn: What does
repeat_pattern return?
Anonymous Functions
def square(x):
return x * x
foo = lambda x: x * x
foo(1)
foo(4)
1
16
New Patterns
clear_all()
show(repeat_pattern(3,
lambda pic: beside(pic, pic),
nova_bb))
clear_all()
show(repeat_pattern(3,
lambda pic: stack(pic, pic),
nova_bb))
anonymous
function
Another nice pattern
clear_all()
show(repeat_pattern(4, make_cross, rcross_bb))
What about 3 rows?
clear_all()
show(stack_frac(1/3, rcross_bb, sail_bb))
clear_all()
show(stack_frac(1/3, rcross_bb,
stack(rcross_bb, rcross_bb)))
Stacking n times
def stackn(n,pic):
if n == 1:
return pic
else:
return stack_frac(1/n, pic, stackn(n-1, pic))
clear_all()
show(stackn(3, nova_bb))
clear_all()
show(stackn(5, nova_bb))
A rectagular quilting pattern
clear_all()
show(stackn(5, quarter_turn_right(
stackn(5, quarter_turn_left(nova_bb)))))
A rectangular quilting proc
def nxn(n,pic):
return stackn(n, quarter_turn_right(
stackn(n, quarter_turn_left(pic))))
clear_all()
show(nxn(3, make_cross(rcross_bb)))
What does nxn do?
No idea how a
picture is
represented
No idea how the
operations do
their work
Yet, we can
build complex
pictures
Functional
Abstraction
We can also make Stereograms!!
STEREOGRAM
GENERATOR
depth
map
stereogram
function
Functional Abstraction
Cant see
stereograms?
Anaglyphs
And if you think
this is cool !
You havent
seen nothing
yet!
What have we learned?
Functional Abstraction
Functions are objects
Helps us manage
complexity by
focusing on high-level
problem solving
Creating 3D objects
We use greyscale to represent depth
Black is nearest to you
White is furthest away
means
Creating 3D objects
means
Overlay Operation
clear_all()
show(overlay(sail_bb, rcross_bb))
Advanced Overlay Operation
clear_all()
show(overlay_frac(1/4, corner_bb, heart_bb))
Scaling
clear_all()
show(scale(1/2, heart_bb))
depth
map
stereogram
stereogram(scale(1/2, heart_bb))
Stereogram
generator
depth map