Phyllotaxis mønster i Python | En enhed af algoritmisk botanik
Phyllotaxis/phyllotaxy er arrangementet af blade på en plantestængel og de phyllotactic spiraler danner en karakteristisk klasse af mønstre i naturen. Selve ordet kommer fra det græske phullon, der betyder 'blad', og taxier, der betyder 'arrangement'. De grundlæggende blomsterphyllotaxiske arrangementer omfatter:
1. Spiral phyllotaxis -
I spiral phyllotaxi skabes de enkelte blomsterorganer i et regelmæssigt tidsinterval med samme divergerende vinkel. Den divergerende vinkel i en blomst med spiralfyldning tilnærmer sig 137,5 grader, hvilket indikerer et mønster, der følger en
Fibonacci-serien
.Billedet nedenfor viser spiralfyldningsmønstrene med både med uret og mod uret spiralmønstre.
Vigtige punkter at bemærke:
- Fibonacci-serien beskriver typisk spiraler, der findes i naturen. Det beregnes som en serie, hvor det foregående talpar summer til det næste tal i rækken. Serien er 1 1 2 3 5 8 13 21 34 55 89 … .
- Der er faktisk et sæt spiraler i urets retning og et sæt i retning mod uret.
- Blomsterorganspiraler følger et tæller- og nævnersæt af forskudte Fibonacci-tal (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Tælleren er antallet af gange eller drejninger rundt om aksen for at komme tilbage til initieringsoriginet. Nævneren angiver antallet af organer initieret under vendingerne. Derfor ville en 2/5 angive 2 drejninger omkring aksen og 5 organer for at vende tilbage til oprindelsen.
- f.eks. - I fyrretræet har vi (2 3) (5 3) og (5 8) phyllotaxes in capituli, er de fundne par (21 34) (55 34) (55 89) og (89 144) og på ananas med sekskantede skæl er trillingerne (1) eller (13 132) afhængig af 13 132 størrelsen af prøverne.
- Forekomsten af Fibonacci-sekvensen i phyllotaxis omtales ofte som 'mysteriet med phyllotaxis'.
Andre typer af blomster phyllotaxic arrangementer er:
2. Hvirvlende phyllotaxis 3. Enkel hvirlet phyllotaxis 4. Kompleks hvirlet phyllotaxis & 5. Uregelmæssig phyllotaxis
Mønsterets Dannelse: Sammenfatning
Det smukke arrangement af blade i nogle planter kaldet phyllotaxis adlyder en række subtile matematiske forhold. For eksempel danner buketter i hovedet på en solsikke to modsat rettede spiraler: 55 af dem med uret og 34 mod uret. Overraskende nok
- Disse tal er fortløbende Fibonacci-numre.
- Forholdet mellem alternative Fibonacci-tal er givet ved konvergenterne til φ^(-2), hvor φ er gyldne snit og siges at måle brøkdelen af en omgang mellem på hinanden følgende blade på en plantes stilk:
- fx: 1/2 for elm og lind 1/3 for bøg og hassel 2/5 for eg og æble 3/8 for poppel og rose 5/13 for pil og mandel mv.
- Hvert nyt blad på en plantestængel er placeret i en vis vinkel i forhold til det foregående, og at denne vinkel er konstant mellem bladene: normalt omkring 137,5 grader.
Det vil sige, at hvis du ser nedefra på planten og måler vinklen mellem en linje trukket fra stilken til bladet og en tilsvarende linje for det næste blad, vil du opdage, at der generelt er en fast vinkel kaldet divergensvinklen. Her er vi interesserede i Spiral Phyllotaxy, og vi vil kode for at danne Spiral Phyllotaxy-mønster i python ved hjælp af skildpaddegrafik.
Design af koden
- Vi vil kode to funktioner, den ene til at tegne phyllotaxy-mønsteret og den anden til at tegne kronbladene.
- Kronbladene skal først tegnes, efter at phyllotaxis-mønsteret er fuldført. Så vi kalder drawPetal()-funktionen inde fra drawPhyllPattern()-funktionen med de sidste x & y-koordinater, der besøges efter at have tegnet Phyllotaxis-mønsteret.
- DrawPetal()-funktionen vil tegne kronbladene med skildpaddefunktioner og -funktioner Skildpadde programmering .
For at kode phyllotaxis-mønsteret skal vi følge disse ligninger:
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 idleProduktion:
Phyllotaxis mønstre.
![]()
Opret quiz