Phyllotaxis mønster i Python | En enhed af algoritmisk botanik

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.

Phyllotaxis mønster i Python | En enhed af algoritmisk botanik


Vigtige punkter at bemærke:

  1. 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 … .
  2. Der er faktisk et sæt spiraler i urets retning og et sæt i retning mod uret.
  3. 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.
  4. 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.
  5. 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

  1. Disse tal er fortløbende Fibonacci-numre.
  2. 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:
  3. 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.
  4. 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

  1. Vi vil kode to funktioner, den ene til at tegne phyllotaxy-mønsteret og den anden til at tegne kronbladene.
  2. 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.
  3. 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°
Phyllotaxis mønster i Python | En enhed af algoritmisk botanik
 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 A
   import   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  )   
Python Pattern B
   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 idle   

Produktion:

Phyllotaxis mønstre.

Phyllotaxis mønster i Python | En enhed af algoritmisk botanik

Opret quiz