Vzor fylotaxie v Pythone | Jednotka algoritmickej botaniky
Fyllotaxia/fylotaxia je usporiadanie listov na stonke rastliny a fylotaktické špirály tvoria v prírode výraznú triedu vzorov. Samotné slovo pochádza z gréckeho phullon, čo znamená „list“ a taxíky, čo znamená „aranžmán“. Medzi základné kvetinové fylotaxické aranžmány patria:
1. Špirálová fylotaxia -
Pri špirálovej fylotaxii sa jednotlivé kvetinové orgány vytvárajú v pravidelnom časovom intervale s rovnakým divergentným uhlom. Divergentný uhol v kvete so špirálovou fylotaxiou je približne 137,5 stupňa, čo naznačuje vzor, ktorý nasleduje
Fibonacciho séria
Obrázok nižšie ukazuje špirálové fylotaxické vzory, ktoré majú špirálové vzory v smere aj proti smeru hodinových ručičiek.
Dôležité body, ktoré treba poznamenať:
- Fibonacciho série typicky opisujú špirály nachádzajúce sa v prírode. Vypočíta sa ako séria, kde súčet predchádzajúcich párov čísel je s nasledujúcim číslom v rade. Séria je 1 1 2 3 5 8 13 21 34 55 89 … .
- V skutočnosti existuje jedna sada špirál v smere hodinových ručičiek a jedna sada v protismere hodinových ručičiek.
- Kvetinové organové špirály sledujú množinu čitateľov a menovateľov Fibonacciho čísel (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Čitateľ je počet, koľkokrát alebo otočení okolo osi sa dostanete späť do iniciačného začiatku. Menovateľ udáva počet orgánov iniciovaných počas ťahov. Preto 2/5 indikujú 2 otáčky okolo osi a 5 orgánov na návrat do pôvodného stavu.
- napr. - V borovici máme (2 3) (5 3) a (5 8) fylotaxy v capituli, nájdené páry sú (21 34) (55 34) (55 89) a (89 144) a na ananásoch so šesťhrannými šupinami sa nachádzajú trojičky (8 13 3 z 21) alebo 4 v závislosti od veľkosti 3 z 21) exempláre .
- Prevalencia Fibonacciho sekvencie vo fylotaxii sa často označuje ako „záhada fylotaxie“.
Ďalšie typy kvetinových fylotaxických usporiadaní sú:
2. Fylotaxia sviňa 3. Fylotaxia s jednoduchým svinutím 4. Fylotaxia s komplexom svinutia & 5. Nepravidelná fylotaxia
Formovanie vzoru: Zhrnutie
Krásne usporiadanie listov v niektorých rastlinách nazývaných fylotaxia sa riadi množstvom jemných matematických vzťahov. Napríklad kvietky v hlave slnečnice tvoria dve protiľahlé špirály: 55 z nich v smere hodinových ručičiek a 34 proti smeru hodinových ručičiek. Prekvapivo
- Tieto čísla sú po sebe idúce Fibonacciho čísla.
- Pomery alternatívnych Fibonacciho čísel sú dané konvergentmi k φ^(-2), kde φ je zlatý rez a hovorí sa, že merajú zlomok obratu medzi po sebe nasledujúcimi listami na stonke rastliny:
- napr.: 1/2 pre brest a lipu 1/3 pre buk a liesku 2/5 pre dub a jabloň 3/8 pre topoľ a ružu 5/13 pre vŕbu a mandle atď.
- Každý nový list na stonke rastliny je umiestnený v určitom uhle k predchádzajúcemu a tento uhol je medzi listami konštantný: zvyčajne asi 137,5 stupňa.
To znamená, že ak sa pozriete na rastlinu zhora a zmeriate uhol vytvorený medzi čiarou vedenou od stonky k listu a zodpovedajúcou čiarou pre nasledujúci list, zistíte, že vo všeobecnosti existuje pevný uhol nazývaný uhol divergencie. Tu nás zaujíma špirálová fylotaxia a pomocou korytnačej grafiky vytvoríme vzor špirálovej fylotaxie v pytóne.
Navrhovanie kódexu
- Zakódujeme dve funkcie, jednu na kreslenie fylotaxického vzoru a druhú na kreslenie okvetných lístkov.
- Okvetné lístky je potrebné nakresliť až po dokončení vzoru fylotaxie. Preto zavoláme funkciu drawPetal() zvnútra funkcie drawPhyllPattern() s poslednými súradnicami x & y navštívenými po nakreslení vzoru fylotaxie.
- Funkcia drawPetal() nakreslí okvetné lístky s funkciami a vlastnosťami korytnačky Programovanie korytnačiek .
Na kódovanie vzoru fylotaxie musíme postupovať podľa týchto rovníc:
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)
Pseudokód: Vzor fylotaxie
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 idlevýstup:
Vzory fylotaxie.
![]()
Vytvoriť kvíz