Модел на филотаксис в Python | Раздел по алгоритмична ботаника

Модел на филотаксис в Python | Раздел по алгоритмична ботаника

Филотаксис/филотаксис е разположението на листата върху стъблото на растението и филотактичните спирали образуват отличителен клас модели в природата. Самата дума идва от гръцката phullon, което означава „листа“, и taxis, което означава „аранжировка“. Основните флорални филотаксични аранжировки включват:

1. Спирален филотаксис -

При спиралната филотаксия отделните флорални органи се създават в редовен интервал от време с еднакъв различен ъгъл. Дивергентният ъгъл в цвете със спирална филотаксия е приблизително 137,5 градуса, което е показателно за модел, който следва

ред на Фибоначи

.Изображението по-долу показва спиралните модели на филотаксия, имащи спирални модели както по посока на часовниковата стрелка, така и обратно на часовниковата стрелка.

Модел на филотаксис в Python | Раздел по алгоритмична ботаника


Важни точки за отбелязване:

  1. Сериите на Фибоначи обикновено описват спирали, открити в природата. Изчислява се като серия, където предишната двойка числа се събира със следващото число в серията. Поредицата е 1 1 2 3 5 8 13 21 34 55 89 … .
  2. Всъщност има един комплект спирали в посока на часовниковата стрелка и един комплект в посока, обратна на часовниковата стрелка.
  3. Спиралите на флорални органи следват набор от числител и знаменател от изместени числа на Фибоначи (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Числителят е броят пъти или завъртанията около оста, за да се върнете към началната точка на започване. Знаменателят показва броя на органите, инициирани по време на ходовете. Следователно 2/5 би означавало 2 завъртания около оста и 5 органа за връщане към началото.
  4. например - В бора имаме (2 3) (5 3) и (5 8) филотаксиси в capituli откритите двойки са (21 34) (55 34) (55 89) и (89 144), а при ананаси с шестоъгълни люспи се намират триплетите (8 13 21) или (13 21 34) в зависимост върху размера на екземплярите.
  5. Разпространението на последователността на Фибоначи във филотаксиса често се нарича „мистерията на филотаксиса“.


Други видове флорални филотаксични аранжировки са:

2. Филотаксис с бодли 3. Филотаксис с обикновени филотаксиси 4. Филотаксис със сложни филотаксиси и 5. Неправилен филотаксис

Формиране на модела: Резюме

Красивото разположение на листата в някои растения, наречено филотаксис, се подчинява на редица фини математически зависимости. Например цветчетата в главата на слънчогледа образуват две противоположно насочени спирали: 55 от тях по часовниковата стрелка и 34 обратно на часовниковата стрелка. Изненадващо

  1. Тези числа са последователни числа на Фибоначи.
  2. Съотношенията на алтернативните числа на Фибоначи се дават от конвергентите към φ^(-2), където φ е златно сечение и се казва, че измерват частта от оборота между последователните листа на стъблото на растението:
  3. напр.: 1/2 за бряст и липа 1/3 за бук и леска 2/5 за дъб и ябълка 3/8 за топола и роза 5/13 за върба и бадем и др.
  4. Всяко ново листо на стъблото на растението е разположено под определен ъгъл спрямо предишното и този ъгъл е постоянен между листата: обикновено около 137,5 градуса.

Тоест, ако погледнете растението отгоре и измерите ъгъла, образуван между линия, начертана от стъблото до листа и съответната линия за следващия лист, ще откриете, че обикновено има фиксиран ъгъл, наречен ъгъл на отклонение. Тук се интересуваме от спирална филотаксия и ще кодираме, за да формираме спирална филотаксия в Python, използвайки графики на костенурка.

Проектиране на кода

  1. Ще кодираме две функции, едната за изчертаване на модела на филотаксията, а другата за изчертаване на венчелистчетата.
  2. Венчелистчетата трябва да бъдат начертани само след като моделът на филотаксиса е завършен. Така че ние ще извикаме функцията drawPetal() от вътрешността на функцията drawPhyllPattern() с последните координати x & y, посетени след изчертаване на шаблона на филотаксиса.
  3. Функцията drawPetal() ще начертае венчелистчетата с функциите и характеристиките на костенурката Програмиране на костенурка .

За да кодираме модела на филотаксиса, трябва да следваме следните уравнения:

 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°
Модел на филотаксис в Python | Раздел по алгоритмична ботаника
 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)

Псевдокод: Модел на филотаксис

 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   

Изход:

Модели на филотаксис.

Модел на филотаксис в Python | Раздел по алгоритмична ботаника

Създаване на тест