Phyllotaxis-mønster i Python | En enhet for algoritmisk botanikk
Phyllotaxis/phyllotaxy er arrangementet av blader på en plantestamme, og de fyllotaktiske spiralene danner en særegen klasse av mønstre i naturen. Selve ordet kommer fra det greske phullon som betyr 'blad' og taxis som betyr 'arrangement'. De grunnleggende floral phyllotaxic arrangementene inkluderer:
1. Spiral phyllotaxis -
Ved spiralfylling skapes de individuelle blomsterorganene i et regelmessig tidsintervall med samme divergerende vinkel. Den divergerende vinkelen i en blomst med spiralfylling er tilnærmet 137,5 grader, noe som indikerer et mønster som følger en
Fibonacci-serien
.Bildet nedenfor viser spiralfyllingsmønstrene med både med og mot klokken spiralmønstre.
Viktige punkter å merke seg:
- Fibonacci-serien beskriver vanligvis spiraler som finnes i naturen. Det beregnes som en serie hvor det forrige tallparet summeres til neste tall i rekken. Serien er 1 1 2 3 5 8 13 21 34 55 89 … .
- Det er faktisk ett sett med spiraler i retning med klokken og ett sett i retning mot klokken.
- Blomsterorganspiraler følger et teller- og nevnersett med offset Fibonacci-tall (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Telleren er antall ganger eller svinger rundt aksen for å komme tilbake til initieringsopprinnelsen. Nevneren angir antall organer initiert under svingene. Derfor vil en 2/5 indikere 2 svinger rundt aksen og 5 organer for å gå tilbake til origo.
- f.eks - I furua har vi (2 3) (5 3) og (5 8) phyllotaxes in capituli er parene funnet er (21 34) (55 34) (55 89) og (89 144) og på ananas med sekskantede skalaer er trillingene (1) eller 13 13 2 størrelser funnet på av prøvene.
- Utbredelsen av Fibonacci-sekvensen i phyllotaxis blir ofte referert til som "mysteriet med phyllotaxis."
Andre typer floral phyllotaxic arrangementer er:
2. Hvirret phyllotaxis 3. Enkel-hvirlet phyllotaxis 4. Kompleks hvirlet phyllotaxis & 5. Uregelmessig phyllotaxis
Dannelse av mønsteret: Sammendrag
Det vakre arrangementet av blader i noen planter kalt phyllotaxis adlyder en rekke subtile matematiske forhold. For eksempel danner bukettene i hodet på en solsikke to motsatt rettede spiraler: 55 av dem med klokken og 34 mot klokken. Overraskende nok
- Disse tallene er påfølgende Fibonacci-tall.
- Forholdet mellom alternative Fibonacci-tall er gitt av konvergentene til φ^(-2) der φ er gyldne snitt og sies å måle brøkdelen av en sving mellom påfølgende blader på stilken til en plante:
- eks: 1/2 for alm og lind 1/3 for bøk og hassel 2/5 for eik og eple 3/8 for poppel og rose 5/13 for selje og mandel m.m.
- Hvert nye blad på en plantestamme er plassert i en viss vinkel i forhold til det forrige, og at denne vinkelen er konstant mellom bladene: vanligvis omtrent 137,5 grader.
Det vil si at hvis du ser ned ovenfra på planten og måler vinkelen som dannes mellom en linje trukket fra stilken til bladet og en tilsvarende linje for neste blad, vil du finne at det generelt er en fast vinkel som kalles divergensvinkelen. Her er vi interessert i Spiral Phyllotaxy og vi vil kode for å danne Spiral Phyllotaxy-mønster i python ved hjelp av skilpaddegrafikk.
Utforme koden
- Vi skal kode to funksjoner, den ene for å tegne fyllotaksemønsteret og den andre for å tegne kronbladene.
- Kronbladene må bare tegnes etter at phyllotaxis-mønsteret er fullført. Så vi kaller drawPetal()-funksjonen fra innsiden av drawPhyllPattern()-funksjonen med de siste x- og y-koordinatene som ble besøkt etter å ha tegnet Phyllotaxis-mønsteret.
- DrawPetal()-funksjonen vil tegne kronbladene med skilpaddefunksjoner og funksjoner refererer Turtle programmering .
For å kode phyllotaxis-mønsteret må vi følge disse ligningene:
x = r*cos(θ)
y = r*sin(θ)
r θ can also vary - so the to form phyllotactic pattern we substitutethe cartesian form
by polar form:
r = c*sqrt(n)
θ = n*137.508°
Reduces the problem to optimal packing on a disc so
r = c*sqrt(n) is from the area of the circle
Area = πr² and n fills the Area in some units
c1 * n/π = r² c is 1/sqrt(c1/π)
So r = some constant c * sqrt(n)
Pseudokode: Phyllotaxis-mønster
IMPORT MODULES ( MATH TURTLE )
FUNCTION - DrawPhyllotaxisPattern( turtle t length petalstart angle = 137.508 size cspread)
turtleColor('Black')
FillColor(''Orange')
Convert angle to radians (Φ)
initialize ( xcenterycenter ) = ( 00 )
Drawing the Pattern Starts:
For n in Range ( 0t ):
r = cspread * sqrt(n)
θ = n * Φ
x = r * cos(θ) + xcenter
y = r * sin(θ) + ycenter
TURTLE POSITION(xy)
START DRAWING():
if Drawing pattern ends:
DrawFlowerPetals()
FUNCTION - DrawFlowerPetals(Turtle x coordinate y coordinate)
DRAW using Turtle methods
Create Turtle = gfg
Call DrawPhyllotaxisPattern( gfg t length petalstart angle = 137.508 size cspread)
END
Python Pattern APython Pattern Bimport math import turtle def drawPhyllPattern ( turtle t petalstart angle = 137.508 size = 2 cspread = 4 ): '''print a pattern of circles using spiral phyllotactic data''' # initialize position # turtle.pen(outline=1 pencolor='black' fillcolor='orange') turtle . color ( 'black' ) turtle . fillcolor ( 'orange' ) phi = angle * ( math . pi / 180.0 ) #we convert to radian xcenter = 0.0 ycenter = 0.0 # for loops iterate in this case from the first value until < 4 so for n in range ( 0 t ): r = cspread * math . sqrt ( n ) theta = n * phi x = r * math . cos ( theta ) + xcenter y = r * math . sin ( theta ) + ycenter # move the turtle to that position and draw turtle . up () turtle . setpos ( x y ) turtle . down () # orient the turtle correctly turtle . setheading ( n * angle ) if n > petalstart - 1 : turtle . color ( 'yellow' ) drawPetal ( turtle x y ) else : turtle . stamp () def drawPetal ( turtle x y ): turtle . penup () turtle . goto ( x y ) turtle . pendown () turtle . color ( 'black' ) turtle . fillcolor ( 'yellow' ) turtle . begin_fill () turtle . right ( 20 ) turtle . forward ( 70 ) turtle . left ( 40 ) turtle . forward ( 70 ) turtle . left ( 140 ) turtle . forward ( 70 ) turtle . left ( 40 ) turtle . forward ( 70 ) turtle . penup () turtle . end_fill () # this is needed to complete the last petal gfg = turtle . Turtle () gfg . shape ( 'turtle' ) gfg . speed ( 0 ) # make the turtle go as fast as possible drawPhyllPattern ( gfg 200 160 137.508 ) gfg . penup () gfg . forward ( 1000 )import math import turtle def drawPhyllotacticPattern ( t petalstart angle = 137.508 size = 2 cspread = 4 ): '''print a pattern of circles using spiral phyllotactic data''' # initialize position turtle . pen ( outline = 1 pencolor = 'black' fillcolor = 'orange' ) # turtle.color('orange') phi = angle * ( math . pi / 180.0 ) xcenter = 0.0 ycenter = 0.0 # for loops iterate in this case from the first value until < 4 so for n in range ( 0 t ): r = cspread * math . sqrt ( n ) theta = n * phi x = r * math . cos ( theta ) + xcenter y = r * math . sin ( theta ) + ycenter # move the turtle to that position and draw turtle . up () turtle . setpos ( x y ) turtle . down () # orient the turtle correctly turtle . setheading ( n * angle ) if n > petalstart - 1 : #turtle.color('yellow') drawPetal ( x y ) else : turtle . stamp () def drawPetal ( x y ): turtle . up () turtle . setpos ( x y ) turtle . down () turtle . begin_fill () #turtle.fill(True) turtle . pen ( outline = 1 pencolor = 'black' fillcolor = 'yellow' ) turtle . right ( 20 ) turtle . forward ( 100 ) turtle . left ( 40 ) turtle . forward ( 100 ) turtle . left ( 140 ) turtle . forward ( 100 ) turtle . left ( 40 ) turtle . forward ( 100 ) turtle . up () turtle . end_fill () # this is needed to complete the last petal turtle . shape ( 'turtle' ) turtle . speed ( 0 ) # make the turtle go as fast as possible drawPhyllotacticPattern ( 200 160 137.508 4 10 ) turtle . exitonclick () # lets you x out of the window when outside of idleProduksjon:
Phyllotaxis mønstre.
![]()
Lag quiz