Phyllotaxis-mønster i Python | En enhet for algoritmisk botanikk

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.

Phyllotaxis-mønster i Python | En enhet for algoritmisk botanikk


Viktige punkter å merke seg:

  1. 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 … .
  2. Det er faktisk ett sett med spiraler i retning med klokken og ett sett i retning mot klokken.
  3. 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.
  4. 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.
  5. 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

  1. Disse tallene er påfølgende Fibonacci-tall.
  2. 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:
  3. 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.
  4. 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

  1. Vi skal kode to funksjoner, den ene for å tegne fyllotaksemønsteret og den andre for å tegne kronbladene.
  2. 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.
  3. 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°
Phyllotaxis-mønster i Python | En enhet for algoritmisk botanikk
 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   

Produksjon:

Phyllotaxis mønstre.

Phyllotaxis-mønster i Python | En enhet for algoritmisk botanikk

Lag quiz

Topp Artikler

Kategori

Interessante Artikler