نمط Phyllotaxis في بيثون | وحدة من علم النبات الخوارزمي
الانجذاب النباتي/النبات هو ترتيب الأوراق على جذع النبات وتشكل اللوالب النباتية فئة مميزة من الأنماط في الطبيعة. الكلمة نفسها تأتي من الكلمة اليونانية phullon التي تعني "ورقة" وسيارة أجرة تعني "الترتيب". تتضمن الترتيبات النباتية الأساسية للزهرة ما يلي:
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 يشير إلى دورتين حول المحور و5 أعضاء للعودة إلى نقطة الأصل.
- على سبيل المثال - في الصنوبر لدينا (2 3) (5 3) و (5 8) نباتات نباتية في الرأس، الأزواج الموجودة هي (21 34) (55 34) (55 89) و (89 144) وفي الأناناس ذات المقاييس السداسية تم العثور على ثلاثة توائم (8 13 21) أو (13 21 34) اعتمادًا على حجم العينات .
- غالبًا ما يُشار إلى مدى انتشار تسلسل فيبوناتشي في الانجذاب النباتي باسم "لغز الانجذاب النباتي".
الأنواع الأخرى من الترتيبات النباتية الزهرية هي:
2. نبات نباتي دوار 3. نبات نباتي بسيط 4. نبات نباتي معقد و 5. نبات نباتي غير منتظم
تشكيل النموذج : ملخص
إن الترتيب الجميل للأوراق في بعض النباتات، والذي يسمى phyllotaxis، يخضع لعدد من العلاقات الرياضية الدقيقة. على سبيل المثال، تشكل الزهيرات الموجودة في رأس زهرة عباد الشمس حلزونين متعاكسين الاتجاه: 55 منها في اتجاه عقارب الساعة و34 في عكس اتجاه عقارب الساعة. من المستغرب
- هذه الأرقام هي أرقام فيبوناتشي متتالية.
- يتم إعطاء نسب أرقام فيبوناتشي البديلة بواسطة المتقاربات إلى φ^(-2) حيث φ هي النسبة الذهبية ويقال أنها تقيس جزء المنعطف بين الأوراق المتعاقبة على ساق النبات:
- على سبيل المثال: 1/2 للدردار والزيزفون 1/3 للزان والبندق 2/5 للبلوط والتفاح 3/8 للحور والورد 5/13 للصفصاف واللوز إلخ.
- يتم وضع كل ورقة جديدة على ساق النبات بزاوية معينة عن السابقة وتكون هذه الزاوية ثابتة بين الأوراق: عادة حوالي 137.5 درجة.
أي أنك إذا نظرت إلى الأسفل من الأعلى على النبات وقياس الزاوية المتكونة بين الخط المرسوم من الجذع إلى الورقة والخط المقابل للورقة التالية ستجد أن هناك بشكل عام زاوية ثابتة تسمى زاوية التباعد. نحن هنا مهتمون بـ Spiral phyllotaxy وسوف نقوم بتشفير تشكيل نمط Spiral Phyllotaxy في لغة الثعبان باستخدام رسومات السلحفاة.
تصميم الكود
- سنقوم بترميز وظيفتين، واحدة لرسم نمط النسيج النباتي والأخرى لرسم البتلات.
- يجب رسم البتلات فقط بعد اكتمال نمط phyllotaxis. لذلك سوف نقوم باستدعاء وظيفة drawPetal () من داخل وظيفة drawPhyllPattern () مع زيارة آخر إحداثيات x & y بعد رسم نمط phyllotaxis.
- ستقوم الدالة 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°
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 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الإخراج:
أنماط phyllotaxis.
![]()
إنشاء اختبار