Phylotaxis modelis Python | Algoritminės botanikos vienetas

Phylotaxis modelis Python | Algoritminės botanikos vienetas

Filotaksija / filotaksija yra lapų išsidėstymas ant augalo stiebo, o filotaksinės spiralės sudaro išskirtinę gamtos raštų klasę. Pats žodis kilęs iš graikų kalbos phullon, reiškiančio „lapas“, ir taksi, reiškiančio „išdėstymas“. Pagrindinės gėlių filotaksinės kompozicijos apima:

1. Spiralinė filotaksė –

Spiralinėje filotaksijoje atskiri gėlių organai sukuriami reguliariais laiko intervalais su tuo pačiu skirtingu kampu. Skirtingas kampas gėlėje su spiraline filotaksija yra maždaug 137,5 laipsnio, o tai rodo modelį, kuris seka

Fibonačio serija

. Toliau pateiktame paveikslėlyje pavaizduoti spiraliniai filotaksijos raštai, turintys ir pagal laikrodžio rodyklę, ir prieš laikrodžio rodyklę.

Phylotaxis modelis Python | Algoritminės botanikos vienetas


Svarbūs punktai, į kuriuos reikia atkreipti dėmesį:

  1. Fibonačio serijoje paprastai aprašomos gamtoje randamos spiralės. Jis apskaičiuojamas kaip serija, kurioje ankstesnė skaičių pora sumuojasi į kitą serijos skaičių. Serija yra 1 1 2 3 5 8 13 21 34 55 89 … .
  2. Iš tikrųjų yra vienas spiralių rinkinys pagal laikrodžio rodyklę ir vienas prieš laikrodžio rodyklę.
  3. Gėlių vargonų spiralės seka poslinkių Fibonačio skaičių skaitiklio ir vardiklio rinkinį (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Skaitiklis yra kartų arba apsisukimų aplink ašį skaičius, norint grįžti į iniciacijos pradžią. Vardiklis rodo posūkių metu inicijuotų organų skaičių. Todėl 2/5 reikštų 2 apsisukimus aplink ašį ir 5 organus, kad grįžtų į pradinę vietą.
  4. pvz. - Pušyje turime (2 3) (5 3) ir (5 8) filotaksus kapituliuose, randamos poros (21 34) (55 34) (55 89) ir (89 144), o ant ananasų su šešiakampėmis žvyneliais randami trynukai (8 1) arba 13, priklausomai nuo dydžio (14212) iš egzempliorių.
  5. Fibonačio sekos paplitimas filotaksėje dažnai vadinamas „filotaksės paslaptimi“.


Kiti gėlių filotaksinių kompozicijų tipai yra:

2. Sūkurinė filotaksė 3. Paprastoji skilvelė

Rašto formavimas: santrauka

Gražus kai kurių augalų lapų išdėstymas, vadinamas filotaksiu, paklūsta daugybei subtilių matematinių ryšių. Pavyzdžiui, žiedynai saulėgrąžų galvoje sudaro dvi priešingos krypties spirales: 55 iš jų pagal laikrodžio rodyklę ir 34 prieš laikrodžio rodyklę. Stebėtina

  1. Šie skaičiai yra iš eilės einantys Fibonačio skaičiai.
  2. Alternatyvių Fibonačio skaičių santykiai pateikiami konvergentais į φ^(-2), kur φ yra aukso pjūvis ir sakoma, kad jie matuoja posūkio dalį tarp nuoseklių lapų ant augalo stiebo:
  3. pvz.: 1/2 guobai ir liepai 1/3 bukui ir lazdynui 2/5 ąžuolui ir obuoliui 3/8 tuopoms ir rožėms 5/13 gluosniams ir migdolams ir kt.
  4. Kiekvienas naujas augalo stiebo lapas yra tam tikru kampu prieš ankstesnįjį ir šis kampas tarp lapų yra pastovus: paprastai apie 137,5 laipsnio.

Tai yra, jei pažvelgsite į augalą iš viršaus ir išmatuotumėte kampą tarp linijos, nubrėžtos nuo stiebo iki lapo, ir atitinkamos kito lapo linijos, pamatysite, kad paprastai yra fiksuotas kampas, vadinamas nukrypimo kampu. Čia mus domina spiralinė filotaksija ir mes koduosime, kad sudarytume spiralinės filotaksijos modelį python, naudojant vėžlių grafiką.

Kodo projektavimas

  1. Užkoduosime dvi funkcijas, iš kurių viena nupieštų filotaksijos modelį, o kita – žiedlapiams.
  2. Žiedlapius reikia nubraižyti tik užbaigus filotaksės modelį. Taigi funkciją drawPhyllPattern() iškviesime iš funkcijos drawPhyllPattern() vidaus, kai nubraižę filotaksi modelį bus aplankytos paskutinės x & y koordinatės.
  3. Funkcija drawPetal() nupieš žiedlapius su vėžlio funkcijomis ir funkcijomis Vėžlių programavimas .

Norėdami koduoti filotaksės modelį, turime vadovautis šiomis lygtimis:

 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°
Phylotaxis modelis Python | Algoritminės botanikos vienetas
 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)

Pseudokodas: Filotaksis modelis

 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   

Išvestis:

Filotaksės modeliai.

Phylotaxis modelis Python | Algoritminės botanikos vienetas

Sukurti viktoriną