نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي

نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي

الانجذاب النباتي/النبات هو ترتيب الأوراق على جذع النبات وتشكل اللوالب النباتية فئة مميزة من الأنماط في الطبيعة. الكلمة نفسها تأتي من الكلمة اليونانية phullon التي تعني "ورقة" وسيارة أجرة تعني "الترتيب". تتضمن الترتيبات النباتية الأساسية للزهرة ما يلي:

1. النبات الحلزوني -

في علم النبات الحلزوني، يتم إنشاء الأعضاء الزهرية الفردية في فترة زمنية منتظمة بنفس الزاوية المتباينة. تبلغ الزاوية المتباعدة في الزهرة ذات النسيج الحلزوني حوالي 137.5 درجة مما يدل على وجود نمط يتبع

سلسلة فيبوناتشي

الصورة أدناه توضح أنماط النسيج الحلزوني الحلزوني التي تحتوي على أنماط حلزونية في اتجاه عقارب الساعة وعكس اتجاه عقارب الساعة.

نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي


نقاط مهمة يجب ملاحظتها:

  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 يشير إلى دورتين حول المحور و5 أعضاء للعودة إلى نقطة الأصل.
  4. على سبيل المثال - في الصنوبر لدينا (2 3) (5 3) و (5 8) نباتات نباتية في الرأس، الأزواج الموجودة هي (21 34) (55 34) (55 89) و (89 144) وفي الأناناس ذات المقاييس السداسية تم العثور على ثلاثة توائم (8 13 21) أو (13 21 34) اعتمادًا على حجم العينات .
  5. غالبًا ما يُشار إلى مدى انتشار تسلسل فيبوناتشي في الانجذاب النباتي باسم "لغز الانجذاب النباتي".


الأنواع الأخرى من الترتيبات النباتية الزهرية هي:

2. نبات نباتي دوار 3. نبات نباتي بسيط 4. نبات نباتي معقد و 5. نبات نباتي غير منتظم

تشكيل النموذج : ملخص

إن الترتيب الجميل للأوراق في بعض النباتات، والذي يسمى phyllotaxis، يخضع لعدد من العلاقات الرياضية الدقيقة. على سبيل المثال، تشكل الزهيرات الموجودة في رأس زهرة عباد الشمس حلزونين متعاكسين الاتجاه: 55 منها في اتجاه عقارب الساعة و34 في عكس اتجاه عقارب الساعة. من المستغرب

  1. هذه الأرقام هي أرقام فيبوناتشي متتالية.
  2. يتم إعطاء نسب أرقام فيبوناتشي البديلة بواسطة المتقاربات إلى φ^(-2) حيث φ هي النسبة الذهبية ويقال أنها تقيس جزء المنعطف بين الأوراق المتعاقبة على ساق النبات:
  3. على سبيل المثال: 1/2 للدردار والزيزفون 1/3 للزان والبندق 2/5 للبلوط والتفاح 3/8 للحور والورد 5/13 للصفصاف واللوز إلخ.
  4. يتم وضع كل ورقة جديدة على ساق النبات بزاوية معينة عن السابقة وتكون هذه الزاوية ثابتة بين الأوراق: عادة حوالي 137.5 درجة.

أي أنك إذا نظرت إلى الأسفل من الأعلى على النبات وقياس الزاوية المتكونة بين الخط المرسوم من الجذع إلى الورقة والخط المقابل للورقة التالية ستجد أن هناك بشكل عام زاوية ثابتة تسمى زاوية التباعد. نحن هنا مهتمون بـ Spiral phyllotaxy وسوف نقوم بتشفير تشكيل نمط Spiral Phyllotaxy في لغة الثعبان باستخدام رسومات السلحفاة.

تصميم الكود

  1. سنقوم بترميز وظيفتين، واحدة لرسم نمط النسيج النباتي والأخرى لرسم البتلات.
  2. يجب رسم البتلات فقط بعد اكتمال نمط phyllotaxis. لذلك سوف نقوم باستدعاء وظيفة drawPetal () من داخل وظيفة drawPhyllPattern () مع زيارة آخر إحداثيات x & y بعد رسم نمط phyllotaxis.
  3. ستقوم الدالة drawPetal () برسم البتلات باستخدام وظائف السلحفاة وميزاتها المرجعية برمجة السلاحف .

لتشفير نمط phyllotaxis نحتاج إلى اتباع هذه المعادلات:

 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°
نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي
 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)

الكود الزائف: نمط Phyllotaxis

 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   

الإخراج:

أنماط phyllotaxis.

نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي

إنشاء اختبار