P5 library - Transformations

Introduction

...

from p5 import * def setup(): size(300, 300) def draw(): background(240) house(LEFT, TOP) def house(halign=CENTER, valign=CENTER): ... run()

Details for the house function.

Show me def house(halign=CENTER, valign=CENTER): WALL_WIDTH = 100 WALL_HEIGHT = WALL_WIDTH / 1.7 ROOF_HEIGHT = WALL_HEIGHT * 0.7 CHIMNEY_WIDTH = WALL_WIDTH * 0.15 CHIMNEY_HEIGHT = ROOF_HEIGHT * 0.9 DOOR_WIDTH = WALL_WIDTH * 0.2 DOOR_HEIGHT = WALL_HEIGHT * 0.8 WINDOW_WIDTH = (WALL_WIDTH - DOOR_WIDTH) * 0.6 / 2 WINDOW_HEIGHT = WALL_HEIGHT * 0.5 TOTAL_WIDTH = WALL_WIDTH TOTAL_HEIGHT = WALL_HEIGHT + ROOF_HEIGHT offset_x = 0 if halign == LEFT else (-TOTAL_WIDTH/2 if halign == CENTER else -TOTAL_WIDTH) offset_y = 0 if valign == TOP else (-TOTAL_HEIGHT/2 if valign == CENTER else -TOTAL_HEIGHT) push_style() push_matrix() translate(offset_x, offset_y) translate(50, 50) # Wall fill("white") rect_mode(CORNER) rect(0, ROOF_HEIGHT, WALL_WIDTH, WALL_HEIGHT) # Chimney fill("white") rect_mode(CENTER) rect(WALL_WIDTH/4, ROOF_HEIGHT - CHIMNEY_HEIGHT/2, CHIMNEY_WIDTH, CHIMNEY_HEIGHT) # Roof fill("red") triangle(0, ROOF_HEIGHT, WALL_WIDTH, ROOF_HEIGHT, WALL_WIDTH/2, 0) # Door fill("green") rect_mode(CENTER) rect(WALL_WIDTH/2, TOTAL_HEIGHT - DOOR_HEIGHT/2, DOOR_WIDTH, DOOR_HEIGHT) # Windows fill("skyblue") rect_mode(CENTER) x1 = (WALL_WIDTH - DOOR_WIDTH) / 2 / 2 x2 = WALL_WIDTH - x1 y = TOTAL_HEIGHT - DOOR_HEIGHT + WINDOW_HEIGHT/2 rect(x1, y, WINDOW_WIDTH, WINDOW_HEIGHT) rect(x2, y, WINDOW_WIDTH, WINDOW_HEIGHT) pop_style() pop_matrix()

Translate = Move the grid

...

from p5 import * def setup(): size(300, 300) def draw(): background(240) translate(100, 100) house(LEFT, TOP) def house(halign=CENTER, valign=CENTER): ... run()

Rotate = Turn the grid

...

from p5 import * def setup(): size(300, 300) def draw(): background(240) rotate(radians(15)) house(LEFT, TOP) def house(halign=CENTER, valign=CENTER): ... run()

Scale = Resize the grid

...

from p5 import * def setup(): size(300, 300) def draw(): background(240) scale(1.5, 1.5) house(LEFT, TOP) def house(halign=CENTER, valign=CENTER): ... run()

Combine transformations

...

# TODO

Order matters

...

# TODO

Save and restore the grid

...

# TODO