Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky

Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky

Fyllotaxia/fylotaxia je usporiadanie listov na stonke rastliny a fylotaktické špirály tvoria v prírode výraznú triedu vzorov. Samotné slovo pochádza z gréckeho phullon, čo znamená „list“ a taxíky, čo znamená „aranžmán“. Medzi základné kvetinové fylotaxické aranžmány patria:

1. Špirálová fylotaxia -

Pri špirálovej fylotaxii sa jednotlivé kvetinové orgány vytvárajú v pravidelnom časovom intervale s rovnakým divergentným uhlom. Divergentný uhol v kvete so špirálovou fylotaxiou je približne 137,5 stupňa, čo naznačuje vzor, ​​ktorý nasleduje

Fibonacciho séria

Obrázok nižšie ukazuje špirálové fylotaxické vzory, ktoré majú špirálové vzory v smere aj proti smeru hodinových ručičiek.

Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky


Dôležité body, ktoré treba poznamenať:

  1. Fibonacciho série typicky opisujú špirály nachádzajúce sa v prírode. Vypočíta sa ako séria, kde súčet predchádzajúcich párov čísel je s nasledujúcim číslom v rade. Séria je 1 1 2 3 5 8 13 21 34 55 89 … .
  2. V skutočnosti existuje jedna sada špirál v smere hodinových ručičiek a jedna sada v protismere hodinových ručičiek.
  3. Kvetinové organové špirály sledujú množinu čitateľov a menovateľov Fibonacciho čísel (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Čitateľ je počet, koľkokrát alebo otočení okolo osi sa dostanete späť do iniciačného začiatku. Menovateľ udáva počet orgánov iniciovaných počas ťahov. Preto 2/5 indikujú 2 otáčky okolo osi a 5 orgánov na návrat do pôvodného stavu.
  4. napr. - V borovici máme (2 3) (5 3) a (5 8) fylotaxy v capituli, nájdené páry sú (21 34) (55 34) (55 89) a (89 144) a na ananásoch so šesťhrannými šupinami sa nachádzajú trojičky (8 13 3 z 21) alebo 4 v závislosti od veľkosti 3 z 21) exempláre .
  5. Prevalencia Fibonacciho sekvencie vo fylotaxii sa často označuje ako „záhada fylotaxie“.


Ďalšie typy kvetinových fylotaxických usporiadaní sú:

2. Fylotaxia sviňa 3. Fylotaxia s jednoduchým svinutím 4. Fylotaxia s komplexom svinutia & 5. Nepravidelná fylotaxia

Formovanie vzoru: Zhrnutie

Krásne usporiadanie listov v niektorých rastlinách nazývaných fylotaxia sa riadi množstvom jemných matematických vzťahov. Napríklad kvietky v hlave slnečnice tvoria dve protiľahlé špirály: 55 z nich v smere hodinových ručičiek a 34 proti smeru hodinových ručičiek. Prekvapivo

  1. Tieto čísla sú po sebe idúce Fibonacciho čísla.
  2. Pomery alternatívnych Fibonacciho čísel sú dané konvergentmi k φ^(-2), kde φ je zlatý rez a hovorí sa, že merajú zlomok obratu medzi po sebe nasledujúcimi listami na stonke rastliny:
  3. napr.: 1/2 pre brest a lipu 1/3 pre buk a liesku 2/5 pre dub a jabloň 3/8 pre topoľ a ružu 5/13 pre vŕbu a mandle atď.
  4. Každý nový list na stonke rastliny je umiestnený v určitom uhle k predchádzajúcemu a tento uhol je medzi listami konštantný: zvyčajne asi 137,5 stupňa.

To znamená, že ak sa pozriete na rastlinu zhora a zmeriate uhol vytvorený medzi čiarou vedenou od stonky k listu a zodpovedajúcou čiarou pre nasledujúci list, zistíte, že vo všeobecnosti existuje pevný uhol nazývaný uhol divergencie. Tu nás zaujíma špirálová fylotaxia a pomocou korytnačej grafiky vytvoríme vzor špirálovej fylotaxie v pytóne.

Navrhovanie kódexu

  1. Zakódujeme dve funkcie, jednu na kreslenie fylotaxického vzoru a druhú na kreslenie okvetných lístkov.
  2. Okvetné lístky je potrebné nakresliť až po dokončení vzoru fylotaxie. Preto zavoláme funkciu drawPetal() zvnútra funkcie drawPhyllPattern() s poslednými súradnicami x & y navštívenými po nakreslení vzoru fylotaxie.
  3. Funkcia drawPetal() nakreslí okvetné lístky s funkciami a vlastnosťami korytnačky Programovanie korytnačiek .

Na kódovanie vzoru fylotaxie musíme postupovať podľa týchto rovníc:

 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°
Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky
 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)

Pseudokód: Vzor fylotaxie

 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   

výstup:

Vzory fylotaxie.

Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky

Vytvoriť kvíz