Bygge en by av firkanter med Python


Skisse av en firkantby med Excalidraw

Jeg har tidligere brukt Python og biblioteket Turtle til å generere ulike ting; 100.000 desimaler av Pi eller tilfeldige trær. Denne gangen fikk jeg lyst å prøve meg på hus. Så, med alle andre prosjekter, begynner det litt enkelt og jeg tok utgangspunkt i en geometrisk figur, firkanten.

En funksjon som kunne bygge opp en firkant med gitte parametere kom på plass:

# Tegne firkantfunksjon
def firkant(x, y, h, w, col):
    penup()
    color(col)
    pencolor(col)
    setpos(x, y)
    setheading(90)
    pendown()
    begin_fill()
    for i in range(2):
        forward(h)
        right(90)
        forward(w)
        right(90)
    end_fill()
    penup()

Funksjonen kunne dermed gjenbrukes til ulike typer firkanter – hus av ulike høyder og bredder, men også vinduer. Jeg begynte i det små.

Etter litt avgrensning av tilfeldighetene som setter høyden og bredden, passet vinduene fint.

Vi forsøker litt større variasjoner og gjør vinduene litt mer realistiske.

På dette tidspunktet kom min sønn og så på, og ville at husene (og vinduene) skulle ha andre farger, så det måtte vi selvsagt gjøre noe med.

Etterpå økte jeg grensene for bredden på husene også, beregnet litt mer på antall hus etter skjermvindustørrelse.

Økte litt til på ulike husbredder (vi snakker vel egentlig om skyskrapere innser jeg på dette punktet) og bytter også den gule farger ut med moderne hvitt lys. Det ferdige resultatet i tre kjøringer.

Med Python Turtle kan jeg velge å la teningen skje langsomt, raskt eller øyeblikkelig. Det er litt tidkrevende å se på tegneprosessen underveis for å teste koden. Da passer det best med øyeblikkelig tegning, men for å vise hvordan koden bygger opp husene og vinduene, kan du se en kort snutt under her.

Koden finner du her:

https://gist.github.com/orjanv/c2566550d8b31ff41b1cddc25d2715a8