Mot tilfeldige hjørner

Er det et system i noen tilfeldigheter? Er det man tror tilfeldig alltid tilfeldig? Dette er spørsmål vi undersøke med et lite program.

Kommentar:

I de fleste av kodeboksene vil du se at siste linje er

#plt.show()

Dette er slik at figuren ikke skal plottes - og dermed avsløres - idet man åpner sida. Fjern #-tegnet, slik at siste linje blir

plt.show()

i stedet. Da vil du se figurene.

Vi starter med å tenke oss et kvadrat, med et tilfeldig startpunkt:

Tilfeldigheter

Det vi gjør nå er at vi velger et tilfeldig hjørne og beveger oss halvveis mot det hjørnet fra start punktet vårt. Vi får da dannet et nytt punkt. Igjen velger vi et tilfeldig hjørne og beveger oss halvvis mot det hjørnet. Dette fortsetter vi med så lenge vi ønsker.

Oppgave

  1. Kjør koden over flere ganger. Blir du overbevist om at utvalget er tilfeldig?

  2. Endre N = 10 til et større tall og kjør koden. Fylles hele boksen?

De røde prikkene ser store ut når vi plotter mange av dem. Endre kodebiten s=5 til s=1 i linje 22 i koden over for å lage de røde prikkene mindre.

  1. Kjør koden flere ganger og se om det fortsatt vil fylle planet. Er dette forventet?

En liten endring

Vi skal nå legge inn en liten begrensning i valget av nytt punkt. Isteden for å velge et tilfeldig hjørne å bevege seg mot, kan vi nå ikke bevege oss mot samme hjørne to ganger på rad. Ellers er alt likt.

For å gjøre dette legger vi inn en if-setning i koden vår der vi sjekker at vi ikke velger samme hjørne to ganger på rad.

Trekanter

Vi skal nå lage en ny kode der vi ser på tre punkter istedenfor fire. Det er nå ingen begrensning på hvilke hjørner som kan velges.

Vi kan også endre koden vår til å gjelde for andre figurer og andre betingelser.

Oppgave:

  • Endre koden til en annen mangekant, for eksempel femkant, sekskant, åttekant...

  • Endre betingelsene, for eksempel til ikke samme hjørne to ganger, ikke nabohjørner til forrige hjørne, ikke motsatt hjørne...

Under er en eksempelkode der vi plotter en sekskant med betingelsen at programmet ikke kan velge nabohjørnene til forrige hjørne. Det vil si at samme hjørne er ok, og de tre hjørnene på motsatt ende av figuren er ok.

Endre hjørnekriterier

Med firkanten bestemte vi at man ikke kunne gå mot samme punkt to ganger på rad:

Med sekskanten gjorde vi slik at man ikke kunne gå mot et nabohjørne:

For å legge inn dine egne kriterier til hvilke hjørner vi kan og ikke kan velge, må du bytte ut kriteriet som står i while-løkka.

Endre hjørner

For å lage andre figurer, må du endre tallene i x_koord og y_koord. Husk at disse koordinatene til punktene er gitt slik at elementene på plass nummer n i x_koord og y_koord er henholdsvis x- og y-koordinatene til samme punkt.

Pass på!

Hvis du endrer til en annen figur (f.eks. fra firkant til femkant), må du passe på å også endre det som står i rd.randint()-funksjonene. Første tall skal være 0, og andre tall skal være 1 mindre enn antall hjørner i figuren, så for en femkant skal det f.eks. stå rd.randint(0, 4). Grunnen til at det skal være 1 mindre, er at vi starter på 0.