Vzorec filotaksije v Pythonu | Enota algoritmične botanike

Vzorec filotaksije v Pythonu | Enota algoritmične botanike

Filotaksija/filotaksija je razporeditev listov na rastlinskem steblu in filotaktične spirale tvorijo poseben razred vzorcev v naravi. Sama beseda izhaja iz grškega phullon, ki pomeni 'list', in taxis, ki pomeni 'aranžma'. Osnovni cvetlični filotaksični aranžmaji vključujejo:

1. Spiralna filotaksija -

Pri spiralni filotaksiji se posamezni cvetni organi ustvarjajo v enakomernem časovnem intervalu z enakim divergentnim kotom. Divergentni kot v cvetu s spiralno filotaksijo je približno 137,5 stopinj, kar kaže na vzorec, ki sledi

Fibonaccijeva serija

.Spodnja slika prikazuje spiralne vzorce filotaksije, ki imajo spiralne vzorce v smeri urinega kazalca in v nasprotni smeri urinega kazalca.

Vzorec filotaksije v Pythonu | Enota algoritmične botanike


Pomembne točke, ki jih morate upoštevati:

  1. Fibonaccijeve vrste običajno opisujejo spirale, ki jih najdemo v naravi. Izračuna se kot niz, kjer se prejšnji par števil sešteje z naslednjim številom v nizu. Serija je 1 1 2 3 5 8 13 21 34 55 89 ….
  2. Dejansko obstaja en niz spiral v smeri urinega kazalca in en niz v nasprotni smeri urinega kazalca.
  3. Spirale cvetnih orgel sledijo nizu števca in imenovalca zamaknjenih Fibonaccijevih števil (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Števec je število krat ali obratov okoli osi, da se vrnemo na začetni izvor. Imenovalec označuje število organov, sproženih med obrati. Zato bi 2/5 pomenilo 2 obrata okoli osi in 5 organov za vrnitev v izvor.
  4. npr. - V boru imamo (2 3) (5 3) in (5 8) filotakse v kapitulih, najdeni pari so (21 34) (55 34) (55 89) in (89 144), na ananasih s šesterokotnimi luskami pa triplete (8 13 21) ali (13 21 34), odvisno od na velikost osebkov.
  5. Razširjenost Fibonaccijevega zaporedja v filotaksi se pogosto imenuje "skrivnost filotakse".


Druge vrste cvetličnih filotaksičnih aranžmajev so:

2. Kobilčasta filotaksija 3. Enostavno kobulčasta filotaksija 4. Kompleksno kobulčasta filotaksija & 5. Nepravilna filotaksija

Oblikovanje vzorca : povzetek

Lepa razporeditev listov pri nekaterih rastlinah, imenovanih filotaksija, je podrejena številnim subtilnim matematičnim odnosom. Na primer, cvetovi v glavici sončnice tvorijo dve nasprotno usmerjeni spirali: 55 jih je v smeri urinega kazalca in 34 v nasprotni smeri urinega kazalca. Presenetljivo

  1. Te številke so zaporedne Fibonaccijeve številke.
  2. Razmerja alternativnih Fibonaccijevih števil so podana s konvergenti k φ^(-2), kjer je φ zlati rez in naj bi merili delež obrata med zaporednimi listi na steblu rastline:
  3. npr.: 1/2 za brest in lipo 1/3 za bukev in lesko 2/5 za hrast in jablano 3/8 za topol in vrtnico 5/13 za vrbo in mandelj itd.
  4. Vsak nov list na rastlinskem steblu je postavljen pod določenim kotom glede na prejšnjega in da je ta kot konstanten med listi: običajno približno 137,5 stopinj.

To pomeni, da če pogledate rastlino od zgoraj navzdol in izmerite kot med črto, ki poteka od stebla do lista, in ustrezno črto za naslednji list, boste ugotovili, da je na splošno fiksen kot, ki se imenuje divergenčni kot. Tu nas zanima spiralna filotaksija in kodirali bomo, da bomo oblikovali vzorec spiralne filotaksije v pythonu z uporabo grafike želve.

Oblikovanje kode

  1. Kodirali bomo dve funkciji, eno za risanje vzorca filotaksije in drugo za risanje cvetnih listov.
  2. Cvetne liste je treba narisati šele potem, ko je vzorec filotakse končan. Zato bomo poklicali funkcijo drawPetal() znotraj funkcije drawPhyllPattern() z zadnjimi koordinatami x & y, ki bodo obiskane po risanju vzorca filotakse.
  3. Funkcija drawPetal() bo narisala cvetne liste z referenčnimi funkcijami in funkcijami želve Programiranje želve .

Za kodiranje vzorca filotakse moramo slediti tem enačbam:

 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°
Vzorec filotaksije v Pythonu | Enota algoritmične botanike
 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)

Psevdokoda: Vzorec filotaksije

 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   

Izhod:

Vzorci filotaksije.

Vzorec filotaksije v Pythonu | Enota algoritmične botanike

Ustvari kviz