Модел на филотаксис в Python | Раздел по алгоритмична ботаника
Филотаксис/филотаксис е разположението на листата върху стъблото на растението и филотактичните спирали образуват отличителен клас модели в природата. Самата дума идва от гръцката phullon, което означава „листа“, и taxis, което означава „аранжировка“. Основните флорални филотаксични аранжировки включват:
1. Спирален филотаксис -
При спиралната филотаксия отделните флорални органи се създават в редовен интервал от време с еднакъв различен ъгъл. Дивергентният ъгъл в цвете със спирална филотаксия е приблизително 137,5 градуса, което е показателно за модел, който следва
ред на Фибоначи
.Изображението по-долу показва спиралните модели на филотаксия, имащи спирални модели както по посока на часовниковата стрелка, така и обратно на часовниковата стрелка.
Важни точки за отбелязване:
- Сериите на Фибоначи обикновено описват спирали, открити в природата. Изчислява се като серия, където предишната двойка числа се събира със следващото число в серията. Поредицата е 1 1 2 3 5 8 13 21 34 55 89 … .
- Всъщност има един комплект спирали в посока на часовниковата стрелка и един комплект в посока, обратна на часовниковата стрелка.
- Спиралите на флорални органи следват набор от числител и знаменател от изместени числа на Фибоначи (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Числителят е броят пъти или завъртанията около оста, за да се върнете към началната точка на започване. Знаменателят показва броя на органите, инициирани по време на ходовете. Следователно 2/5 би означавало 2 завъртания около оста и 5 органа за връщане към началото.
- например - В бора имаме (2 3) (5 3) и (5 8) филотаксиси в capituli откритите двойки са (21 34) (55 34) (55 89) и (89 144), а при ананаси с шестоъгълни люспи се намират триплетите (8 13 21) или (13 21 34) в зависимост върху размера на екземплярите.
- Разпространението на последователността на Фибоначи във филотаксиса често се нарича „мистерията на филотаксиса“.
Други видове флорални филотаксични аранжировки са:
2. Филотаксис с бодли 3. Филотаксис с обикновени филотаксиси 4. Филотаксис със сложни филотаксиси и 5. Неправилен филотаксис
Формиране на модела: Резюме
Красивото разположение на листата в някои растения, наречено филотаксис, се подчинява на редица фини математически зависимости. Например цветчетата в главата на слънчогледа образуват две противоположно насочени спирали: 55 от тях по часовниковата стрелка и 34 обратно на часовниковата стрелка. Изненадващо
- Тези числа са последователни числа на Фибоначи.
- Съотношенията на алтернативните числа на Фибоначи се дават от конвергентите към φ^(-2), където φ е златно сечение и се казва, че измерват частта от оборота между последователните листа на стъблото на растението:
- напр.: 1/2 за бряст и липа 1/3 за бук и леска 2/5 за дъб и ябълка 3/8 за топола и роза 5/13 за върба и бадем и др.
- Всяко ново листо на стъблото на растението е разположено под определен ъгъл спрямо предишното и този ъгъл е постоянен между листата: обикновено около 137,5 градуса.
Тоест, ако погледнете растението отгоре и измерите ъгъла, образуван между линия, начертана от стъблото до листа и съответната линия за следващия лист, ще откриете, че обикновено има фиксиран ъгъл, наречен ъгъл на отклонение. Тук се интересуваме от спирална филотаксия и ще кодираме, за да формираме спирална филотаксия в Python, използвайки графики на костенурка.
Проектиране на кода
- Ще кодираме две функции, едната за изчертаване на модела на филотаксията, а другата за изчертаване на венчелистчетата.
- Венчелистчетата трябва да бъдат начертани само след като моделът на филотаксиса е завършен. Така че ние ще извикаме функцията drawPetal() от вътрешността на функцията drawPhyllPattern() с последните координати x & y, посетени след изчертаване на шаблона на филотаксиса.
- Функцията 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°
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 APython Pattern Bimport 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 )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Изход:
Модели на филотаксис.
![]()
Създаване на тест