Julekuler, snøflak og rotasjonssymmetri#

I denne guiden skal vi lære hvordan dekorere julepynt med snøfnuggbroderi i Python. Bildet under viser et eksempel på julepynten vi skal lage med programmering.

Et brodert snøfnugg

Notis

Denne guiden antar at du har turtlethread installert fra før. Hvis du ikke har det, kan du trykke her for instrukser.

Et klassisk og vakkert motiv for julepynt er et snøfnugg. Hva er det som gjør snøfnugg så dekorative?

../_images/SIA-SIA2013-09130.jpg

Snøfnugg (Bilde av Wilson Alwyn Bentley (1865-1931)).#

Ser vi nærmere på snøfnugget over ser vi at et av kjennetegnene er at det er symmetrisk. Det har for eksempel rotasjonssymmetri som vil si at det ser likt ut (med unntak av små «skader») når vi roterer rundt sentrum. Rotasjonssymmetri er både dekorativt og resurssparende og er mye brukt i både natur, matematikk, design og kunst.

../_images/pexels-julia-volk-7293094.jpg

Natur#

Sjøstjerne (bilde av Julia Volk).

../_images/3-7_kisrhombille.svg

Matematikk#

Illustrasjon av et matematisk konsept (illustrasjon av Parcly Taxel)

../_images/pexels-andreea-ch-1040895.jpg

Kunst#

Rom med fargerike fliser (bilde av Andreea Ch)

../_images/pexels-humphrey-muleba-2271568.jpg

Teknologi#

Pynt til jul med snøkrystallbroderi i Python!#

Brodere en strek#

Begynn med å kopiere koden under inn i kodeeditoren din og kjør den. Hva blir tegnet opp på skjermen?

1from turtlethread import Turtle
2
3nål = Turtle()
4with nål.running_stitch(50):
5    nål.forward(100)
6
7nål.visualise()
Resultat fra koden over. En horisontal blå strek med tre korte vertikale streker, en i hver ende og en på midten.

La oss gå igjennom koden linje for linje:

Linje 1:

Importerer Turtle kommandoen fra turtlethread biblioteket. Dette er litt som å be Python om å gå inn i verktøyboden og hente frem det verktøyet (Turtle) vi trenger og legge det frem på arbeidsbenken.

Linje 3:

Bruker Turtle kommandoen til å lage et Turtle objekt og lagre det i en variabel ved navn ‘nål’. Dette er det vi skal bruke for å brodere.

Linje 4:

Forteller hva slags søm vi skal bruke. For mer om søm i turtlethread kan du klikke her, men alt du trenger å vite for nå er at vi i denne linjen ber om en rettsøm (running_stitch) med 5 mm (50 steg) mellom hvert sting.

Linje 5:

Ber nåla om å bevege seg fremover 100 steg. Legg merke til at denne koden ligger inne i et innrykk etter with nål.running_stitch(50): linja, som betyr at nåla skal brodere mens den beveger seg.

Linje 7:

Kaller på nåla sin visualise funksjon. Denne funksjonen ber Python tegne hvordan broderiet kommer til å se ut og er en fin måte å sjekke om mønsteret blir riktig før du prøver å brodere på stoff.

Linje 2 og 6:

Er tomme. Tomme linjer brukes til å gjøre koden ryddigere og enklere å lese, men har ikke noe å si for programmet. Du kan fjerne dem uten at det har noen effekt.

Prøv selv:

  • Endre programmet slik at det har en søm med 30 steg mellom hvert sting. Kjør programmet, ser du forskjellen?

  • Endre programmet slik at nåla beveger seg 90 steg fremover istedenfor 100 steg fremover.

Klikk her for å se programmet slik det skal være om du har gjort det rett:
1from turtlethread import Turtle
2
3nål = Turtle()
4with nål.running_stitch(30):
5    nål.forward(90)
6
7nål.visualise()
Resultat fra koden over. En horisontal blå strek med fire korte vertikale streker med lik avstand mellom hver strek.

Obs

Pass på at koden stemmer med løsningsforslaget over før du går videre.

Snu til høyre#

Vi vil at «armene» til snøkrystallen skal ha «grener». For å få til det må vi rotere skilpadden, det kan vi gjøre med right kommandoen. Programmet under tegner en gren med 45° rotasjon og steglengde 90:

 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5    # Gå litt frem
 6    nål.forward(90)
 7
 8    # Tegn en "gren", denne peker litt nedover
 9    nål.right(45)
10    nål.forward(90)
11
12nål.visualise()
Resultat fra koden over. En horisontal blå strek og en diagonal strek som starter i høyre ende av den horisontale streken. Strekene har små streker på tvers med lik avstand mellom hver tverrstrek.
Linje 5 og 8:

Starter med et # symbol som betyr at her kommer en kommentar som Python skal ignorere. Slike kommentarer bruker vi for å holde programmet ryddig med små forklaringer.

Linje 9:

Roterer skilpadden 45 grader mot høyre.

Prøv selv:

  • Kjør programmet og se hva du får ut

  • Endre programmet slik at grenen er rotert 30 grader istedenfor 45

  • Endre programmet slik at grenen har lengde 60 istedenfor 90

Klikk her for å se programmet slik det skal være om du har gjort det rett:
 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5    # Gå litt frem
 6    nål.forward(90)
 7
 8    # Tegn en "gren", denne peker litt nedover
 9    nål.right(30)
10    nål.forward(60)
11
12nål.visualise()
Resultat fra koden over. En horisontal blå strek og en diagonal strek som starter i høyre ende av den horisontale streken. Strekene har små streker på tvers med lik avstand mellom hver tverrstrek.

Obs

Pass på at koden stemmer med løsningsforslaget over før du går videre.

Fullføre armen på snøfnugget#

Etter å ha tegnet «grenen» må vi rygge bakover og rotere tilbake for å fortsette på armen. Dette kan vi gjøre med backward og left slik:

 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5    # Gå litt frem
 6    nål.forward(90)
 7
 8    # Tegn første "gren", denne peker litt nedover
 9    nål.right(45)
10    nål.forward(60)
11    nål.backward(60)
12    nål.left(45)
13
14    # Gå litt frem
15    nål.forward(90)
16
17nål.visualise()
Resultat fra koden over. En lang horisontal blå strek og en diagonal strek som starter i midten av den lange streken og går litt nedover. Strekene har små streker på tvers med lik avstand mellom hver tverrstrek.

Prøv selv:

  • Kjør programmet og se hva du får ut.

  • Hvorfor er tallet i linje 10 og 11 likt. Er dette viktig? Hvorfor/Hvorfor ikke?

Nå fullfører vi armen ved å gå bakover og tegne en gren på andre siden også. Det er viktig at vi slutter med nåla i samme posisjon og pekende i samme retning som når vi startet:

 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5    # Gå litt frem
 6    nål.forward(90)
 7
 8    # Tegn første "gren", denne peker litt nedover
 9    nål.right(30)
10    nål.forward(60)
11    nål.backward(60)
12    nål.left(30)
13
14    # Gå litt frem og tilbake
15    nål.forward(90)
16    nål.backward(90)
17
18    # Tegn andre "gren", denne peker litt oppover
19    nål.left(30)
20    nål.forward(60)
21    nål.backward(60)
22    nål.right(30)
23
24    # Gå tilbake til start
25    nål.backward(90)
26
27nål.visualise()
Resultat fra koden over. En lang horisontal blå strek og to diagonale streker som starter i midten av den lange streken og går litt nedover og oppover. Strekene har små streker på tvers med lik avstand mellom hver tverrstrek.

Prøv selv:

  • Kjør programmet og se hva du får ut.

  • Hva gjør linje 19 til 22?

Obs

Pass på at koden stemmer med løsningsforslaget over før du går videre.

Bruke løkker til å tegne snøflak#

Nå har vi et program som instruerer skilpadden vår til å brodere en snøkrystallarm. Men snøkrystaller har gjerne flere armer, så får å tegne hele krystallen må vi gjenta disse kommandoene flere ganger. For det kan vi bruke en løkke. En mer detaljert forklaring på løkker i Python finner du her, men for nå er alt du trenger å vite at vi kan bruke en forløkke for å tegne fire armer slik:

 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5
 6    for arm in range(4):
 7        # Gå litt frem
 8        nål.forward(90)
 9
10        # Tegn første "gren", denne peker litt nedover
11        nål.right(30)
12        nål.forward(60)
13        nål.backward(60)
14        nål.left(30)
15    
16        # Gå litt frem og tilbake
17        nål.forward(90)
18        nål.backward(90)
19    
20        # Tegn andre "gren", denne peker litt oppover
21        nål.left(30)
22        nål.forward(60)
23        nål.backward(60)
24        nål.right(30)
25
26        # Gå tilbake til start
27        nål.backward(90)
28
29        # Roter 90 grader mot høyre for å tegne fire grener
30        nål.right(90)
31
32nål.visualise()
Resultat fra koden over. Et snøfnugg med fire "armer". Hver arm er lik bildet fra forrige kodebit.

De eneste nye linjene i dette programemt er linje 6 og 30.

Linje 6:

Definerer en for løkke og forteller python at alt som skjer inne i løkka skal gjentas 4 ganger. Legg merke til at linjene 7-30 har blitt flyttet ett innrykk inn. Det forteller python at disse linjene er inne i løkka og skal gjentas for hver runde i løkka

Linje 30:

Ber skilpadden om å rotere 90 grader for hver runde i løkka. Denne linja trenger vi for at snøkrystallarmene ikke skal tegnes oppå hverandre.

Prøv selv:

  • Kjør programmet og se hva du får ut

  • Hvorfor roterer det 90 grader i linje 30? Hva skjer om du endrer til 60?

  • Endre programemt slik at det tegner en snøkrystall med 6 armer istedenfor 4

Klikk her for å se programmet slik det skal være om du har gjort det rett:
 1import turtlethread
 2
 3nål = turtlethread.Turtle()
 4with nål.running_stitch(30):
 5
 6    for arm in range(6):
 7        # Gå litt frem
 8        nål.forward(90)
 9
10        # Tegn første "gren", denne peker litt nedover
11        nål.right(30)
12        nål.forward(60)
13        nål.backward(60)
14        nål.left(30)
15    
16        # Gå litt frem og tilbake
17        nål.forward(90)
18        nål.backward(90)
19    
20        # Tegn andre "gren", denne peker litt oppover
21        nål.left(30)
22        nål.forward(60)
23        nål.backward(60)
24        nål.right(30)
25
26        # Gå tilbake til start
27        nål.backward(90)
28
29        # Roter 60 grader mot høyre for å tegne seks grener
30        nål.right(60)
31
32nål.visualise()
Resultat fra koden over. Et snøfnugg med seks "armer". Ellers er det likt bildet over.

Obs

Pass på at koden stemmer med løsningsforslaget over før du går videre.

Nå har vi kode for å tegne et helt snøfnugg!

Prøv selv:

Bruk kode til å tegne dit eget snøfnugg med rotasjonssymmetri. Under er et galleri med noen eksempler til inspirasjon:

Lage en julekule med snøflakmønster#

Et bilde av broderimaskinen mens den lager et snøfnugg.

For å lage juletrepynt med snøflakbroderiet må du først lagre mønsteret som en broderifil. Dette kan du gjøre ved å legge til

nål.save("snøflak.jef")

på slutten av scriptet ditt. Merk at vi her bruker .jef-filtypen, som vi har funnet ut at virker bra med Bernina 500 broderimaskinen vi har brukt, men du vil kanskje bruke en annen filtype for din maskin (f.eks. snøflak.pes). Når du har lagd broderifilen kan du følge disse instruksene for å lage en julekule:

  1. Broder ett eller to snøfnugg, avhengig av om du vil ha snøfnugg på begge sidene av julekulen,

  2. legg de to stoffbitene oppå hverandre slik at broderiene er rett over hverandre og peker utover,

  3. og sy sammen stoffbitene (enten for hånd eller ved å tegne en sirkel med turtlethread).

Eksempelsnøflak#

Snøflak 1

To armer av ulike snøflak oppå hverandre (med 30 graders rotasjon mellom de to armene). Den en arm-typen består av en lang linje med tre sirkler av ulik størrelse på enden. Den andre arm-typen består av en liten strek med en liten sirkel på enden.

Snøflak 2

En rettvinklet trekant hvor hypotenusen er horisontal. Katetenes forhold til hypotenusen er 3/5 og 4/5.

Snøflak 3

To armer av ulike snøflak oppå hverandre (med 30 graders rotasjon mellom). Begge armene likner på de i guiden, men har ulik størrelse.