Python'da filotaksis modeli | Bir Algoritmik Botanik birimi

Python'da filotaksis modeli | Bir Algoritmik Botanik birimi

Filotaksis / filotaksi, bir bitki gövdesi üzerindeki yaprakların düzenlenmesidir ve Filotaktik spiraller, doğada kendine özgü bir desen sınıfı oluşturur. Kelimenin kendisi Yunanca 'yaprak' anlamına gelen phullon ve 'düzenleme' anlamına gelen taksilerden gelir. Temel çiçek filotaksik düzenlemeleri şunları içerir:

1. Spiral Filotaksis -

Spiral filotakside, bireysel çiçek organları aynı farklı açıyla düzenli bir zaman aralığında oluşturulur. Spiral filotaksili bir çiçekteki ıraksak açı yaklaşık 137,5 derecedir, bu da bir deseni takip eden bir modelin göstergesidir.

Fibonacci serisi

Aşağıdaki resimde hem saat yönünde hem de saat yönünün tersine spiral desenlere sahip spiral filotaksi desenleri gösterilmektedir.

Python


Dikkat edilmesi gereken önemli noktalar:

  1. Fibonacci serisi tipik olarak doğada bulunan spiralleri tanımlar. Önceki sayı çiftinin toplamının serideki bir sonraki sayıya eşit olduğu bir seri olarak hesaplanır. Seri 1 1 2 3 5 8 13 21 34 55 89… .
  2. Aslında saat yönünde bir takım spiraller ve saat yönünün tersine bir takım spiraller vardır.
  3. Çiçek organ spiralleri, Fibonacci sayılarından oluşan bir pay ve payda kümesini takip eder (1/2 1/3 2/5 3/8 5/13 8/21 13/34…). Pay, başlatma başlangıç ​​noktasına geri dönmek için eksen etrafındaki dönüş sayısı veya dönüş sayısıdır. Payda, dönüşler sırasında başlatılan organ sayısını gösterir. Bu nedenle 2/5, eksen etrafında 2 dönüş ve 5 organın orijine dönmesi anlamına gelir.
  4. örneğin - Çamda capituli'de (2 3) (5 3) ve (5 8) filotakslar bulunur ve bulunan çiftler (21 34) (55 34) (55 89) ve (89 144)'tür ve altıgen pullu ananaslarda üçüzler (8 13 21) veya (13 21 34) bulunur. örnekler.
  5. Fibonacci dizisinin filotaksideki yaygınlığına genellikle 'filotaksinin gizemi' denir.


Diğer çiçek filotaksik düzenleme türleri şunlardır:

2. Dairesel Filotaksis 3. Basit Dairesel Filotaksis 4. Karmaşık Dairesel Filotaksis ve 5. Düzensiz Dairesel Filotaksis

Desenin Oluşumu: Özet

Bazı bitkilerde filotaksis adı verilen yaprakların güzel dizilişi, bir dizi ince matematiksel ilişkiye uyar. Örneğin bir ayçiçeğinin başındaki çiçekçikler birbirine zıt iki spiral oluşturur; bunların 55'i saat yönünde ve 34'ü saatin tersi yönündedir. Şaşırtıcı bir şekilde

  1. Bu sayılar ardışık Fibonacci sayılarıdır.
  2. Alternatif Fibonacci sayılarının oranları yakınsaklarla φ^(-2)'ye verilir; burada φ, altın oran ve bir bitkinin sapı üzerindeki ardışık yapraklar arasındaki dönüş oranını ölçtüğü söylenir:
  3. Örneğin: Karaağaç ve ıhlamur için 1/2 Kayın ve ela için 1/3 Meşe ve elma için 2/5 Kavak ve gül için 3/8 Söğüt ve badem vb. için 5/13.
  4. Bir bitki gövdesindeki her yeni yaprağın bir öncekine göre belirli bir açıda konumlandırıldığı ve bu açının yapraklar arasında sabit olduğu, genellikle yaklaşık 137,5 derece olduğu anlaşılmaktadır.

Yani bitkiye yukarıdan bakarsanız ve gövdeden yaprağa çizilen bir çizgi ile bir sonraki yaprağa karşılık gelen çizgi arasında oluşan açıyı ölçerseniz, genellikle ıraksama açısı adı verilen sabit bir açının olduğunu göreceksiniz. Burada Spiral filotaksi ile ilgileniyoruz ve kaplumbağa grafiklerini kullanarak Python'da Spiral Filotaksi modelini oluşturmak için kodlayacağız.

Kodu Tasarlamak

  1. Biri filotaksi desenini çizmek için, diğeri yaprakları çizmek için iki fonksiyon kodlayacağız.
  2. Yaprakların yalnızca filotaksis deseni tamamlandıktan sonra çizilmesi gerekir. Bu nedenle, filotaksis deseni çizildikten sonra ziyaret edilen son x ve y koordinatlarıyla, DrawPhyllPattern() işlevinin içinden DrawPetal() işlevini çağıracağız.
  3. DrawPetal() fonksiyonu, kaplumbağa fonksiyonlarını ve özelliklerini içeren yaprakları çizecektir. Kaplumbağa programlama .

Filotaksis modelini kodlamak için şu denklemleri takip etmemiz gerekir:

 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)

PseudoCode: Filotaksis Deseni

 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   

Çıkış:

Filotaksis Modelleri.

Python

Test Oluştur