Vzor fylotaxe v Pythonu | Jednotka algoritmické botaniky
Fyllotaxe/fylotaxe je uspořádání listů na stonku rostliny a fylotaktické spirály tvoří v přírodě výraznou třídu vzorů. Samotné slovo pochází z řeckého phullon znamenajícího 'list' a taxi znamenající 'uspořádání'. Mezi základní květinová fylotaxická uspořádání patří:
1. Spirální fylotaxe -
Při spirální fylotaxi se jednotlivé květní orgány vytvářejí v pravidelném časovém intervalu se stejným divergentním úhlem. Divergenční úhel v květu se spirální fylotaxí se blíží 137,5 stupňů, což svědčí o vzoru, který následuje
Fibonacciho řada
Obrázek níže ukazuje spirální fylotaxické vzory mající spirální vzory ve směru i proti směru hodinových ručiček.
Důležité body:
- Fibonacciho série typicky popisují spirály nalezené v přírodě. Vypočítá se jako řada, kde se předchozí dvojice čísel sečte s následujícím číslem v řadě. Série je 1 1 2 3 5 8 13 21 34 55 89 … .
- Ve skutečnosti existuje jedna sada spirál ve směru hodinových ručiček a jedna sada proti směru hodinových ručiček.
- Květinové varhanní spirály sledují čitatel a jmenovatel sadu offsetových Fibonacciho čísel (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Čitatel je počet, kolikrát nebo otočení kolem osy se dostali zpět do iniciačního počátku. Jmenovatel udává počet orgánů iniciovaných během tahů. Proto 2/5 označují 2 otáčky kolem osy a 5 orgánů pro návrat do počátku.
- např. - V borovici máme (2 3) (5 3) a (5 8) fylotaxe v capituli, nalezené páry jsou (21 34) (55 34) (55 89) a (89 144) a na ananasech s šestihrannými šupinami se nalézají trojčata (8 13 3 z 21) nebo se nalézají v závislosti na 3 velikosti 21) nebo vzorky .
- Prevalence Fibonacciho sekvence ve fylotaxi je často označována jako „záhada fylotaxe“.
Další typy květinových fylotaxických uspořádání jsou:
2. Fylotaxe svinutá 3. Fylotaxe s jednoduchým svinutím 4. Fylotaxe složenou svinutou & 5. Nepravidelná fylotaxe
Tvorba vzoru: Shrnutí
Krásné uspořádání listů u některých rostlin nazývaných fylotaxe se řídí řadou jemných matematických vztahů. Například kvítky v hlavičce slunečnice tvoří dvě opačně orientované spirály: 55 z nich ve směru hodinových ručiček a 34 proti směru hodinových ručiček. Překvapivě
- Tato čísla jsou po sobě jdoucí Fibonacciho čísla.
- Poměry alternativních Fibonacciho čísel jsou dány konvergenty k φ^(-2), kde φ je zlatý řez a říká se, že měří zlomek obratu mezi po sobě jdoucími listy na stonku rostliny:
- např.: 1/2 pro jilm a lípu 1/3 pro buk a lísku 2/5 pro dub a jabloň 3/8 pro topol a růži 5/13 pro vrbu a mandle atd.
- Každý nový list na stonku rostliny je umístěn v určitém úhlu k předchozímu a tento úhel je mezi listy konstantní: obvykle asi 137,5 stupňů.
To znamená, že pokud se na rostlinu podíváte shora dolů a změříte úhel mezi čárou vedenou od stonku k listu a odpovídající čárou pro další list, zjistíte, že obecně existuje pevný úhel nazývaný úhel divergence. Zde nás zajímá spirální fylotaxe a pomocí želví grafiky vytvoříme kód pro vytvoření vzoru spirálové fylotaxe v pythonu.
Navrhování kodexu
- Zakódujeme dvě funkce, jednu pro kreslení vzoru fylotaxe a druhou pro kreslení okvětních lístků.
- Okvětní lístky je třeba nakreslit až po dokončení vzoru fylotaxe. Zavoláme tedy funkci drawPetal() zevnitř funkce drawPhyllPattern() s posledními souřadnicemi x & y navštívenými po nakreslení vzoru fylotaxe.
- Funkce drawPetal() vykreslí okvětní lístky pomocí funkcí a funkcí želvy Programování želv .
Pro kódování vzoru fylotaxe musíme dodržovat tyto rovnice:
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 fylotaxe
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:
Vzorce fylotaxe.
![]()
Vytvořit kvíz