Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej

Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej

Fillotaksja/filotaksja to ułożenie liści na łodydze rośliny, a spirale filotaktyczne tworzą charakterystyczną klasę wzorów w przyrodzie. Samo słowo pochodzi od greckiego słowa phullon oznaczającego „liść” i taksówki oznaczającego „układ”. Do podstawowych kompozycji kwiatowych filotaksyjnych zalicza się:

1. Fillotaksja spiralna -

W filotaksji spiralnej poszczególne narządy kwiatowe powstają w regularnych odstępach czasu pod tym samym rozbieżnym kątem. Kąt rozbieżny w kwiacie z filotaksją spiralną wynosi w przybliżeniu 137,5 stopnia, co wskazuje na wzór, który podąża za

Szereg Fibonacciego

Poniższy obrazek przedstawia spiralne wzory filotaksji, posiadające zarówno spiralne wzory zgodne z ruchem wskazówek zegara, jak i przeciwne do ruchu wskazówek zegara.

Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej


Ważne punkty, na które należy zwrócić uwagę:

  1. Szereg Fibonacciego zazwyczaj opisuje spirale występujące w przyrodzie. Oblicza się ją jako serię, w której poprzednia para liczb sumuje się do następnej liczby w serii. Seria to 1 1 2 3 5 8 13 21 34 55 89… .
  2. W rzeczywistości istnieje jeden zestaw spiral w kierunku zgodnym z ruchem wskazówek zegara i jeden zestaw w kierunku przeciwnym do ruchu wskazówek zegara.
  3. Spirale organów kwiatowych podążają za zestawem liczników i mianowników przesuniętych liczb Fibonacciego (1/2 1/3 2/5 3/8 5/13 8/21 13/34…). Licznik to liczba obrotów lub obrotów wokół osi, aby powrócić do punktu początkowego. Mianownik wskazuje liczbę narządów inicjowanych podczas zwojów. Dlatego 2/5 oznaczałoby 2 obroty wokół osi i 5 narządów, aby powrócić do punktu początkowego.
  4. np. - W sosnie mamy (2 3) (5 3) i (5 8) filotaksy in capituli znalezione pary to (21 34) (55 34) (55 89) i (89 144), a na ananasach z sześciokątnymi łuskami znajdują się trojaczki (8 13 21) lub (13 21 34) w zależności od wielkości próbki .
  5. Występowanie ciągu Fibonacciego w filotaksji jest często określane jako „tajemnica filotaksji”.


Inne rodzaje kompozycji kwiatowych filotaktycznych to:

2. Fillotaksja okółkowa 3. Filotaksja o prostych okółkach 4. Fillotaksja o złożonych okółkach i 5. Fillotaksja nieregularna

Tworzenie wzoru: podsumowanie

Piękny układ liści u niektórych roślin, zwany filotaksją, podlega szeregowi subtelnych zależności matematycznych. Na przykład różyczki w główce słonecznika tworzą dwie przeciwnie skierowane spirale: 55 zgodnie z ruchem wskazówek zegara i 34 przeciwnie do ruchu wskazówek zegara. Zaskakująco

  1. Liczby te są kolejnymi liczbami Fibonacciego.
  2. Stosunki alternatywnych liczb Fibonacciego są podane przez zbieżności do φ^(-2), gdzie φ jest złoty podział i mówi się, że mierzą ułamek obrotu pomiędzy kolejnymi liśćmi na łodydze rośliny:
  3. np.: 1/2 dla wiązu i lipy 1/3 dla buku i leszczyny 2/5 dla dębu i jabłoni 3/8 dla topoli i róży 5/13 dla wierzby i migdałów itp.
  4. Każdy nowy liść na łodydze rośliny jest ustawiony pod pewnym kątem w stosunku do poprzedniego i aby kąt ten był stały pomiędzy liśćmi: zwykle około 137,5 stopnia.

Oznacza to, że jeśli spojrzysz na roślinę z góry i zmierzysz kąt utworzony pomiędzy linią poprowadzoną od łodygi do liścia a odpowiadającą linią następnego liścia, przekonasz się, że ogólnie rzecz biorąc istnieje stały kąt zwany kątem rozbieżności. Tutaj jesteśmy zainteresowani filotaksją spiralną i będziemy kodować, aby utworzyć wzór filotaksji spiralnej w Pythonie przy użyciu grafiki żółwia.

Projektowanie Kodeksu

  1. Zakodujemy dwie funkcje, jedną do rysowania wzoru filotaksji, a drugą do rysowania płatków.
  2. Płatki należy narysować dopiero po ukończeniu wzoru filotaksji. Dlatego wywołamy funkcję remisPetal() z wnętrza funkcji remisPhyllPattern() z ostatnimi współrzędnymi x i y odwiedzanymi po narysowaniu wzoru filotaksji.
  3. Funkcja remisPetal() narysuje płatki z funkcjami i cechami żółwia Programowanie żółwia .

Aby zakodować wzór filotaksji, musimy postępować zgodnie z następującymi równaniami:

 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°
Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej
 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)

Pseudokod: Wzór filotaksji

 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   

Wyjście:

Wzory filotaksji.

Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej

Utwórz quiz