Vzorec filotaksije v Pythonu | Enota algoritmične botanike
Filotaksija/filotaksija je razporeditev listov na rastlinskem steblu in filotaktične spirale tvorijo poseben razred vzorcev v naravi. Sama beseda izhaja iz grškega phullon, ki pomeni 'list', in taxis, ki pomeni 'aranžma'. Osnovni cvetlični filotaksični aranžmaji vključujejo:
1. Spiralna filotaksija -
Pri spiralni filotaksiji se posamezni cvetni organi ustvarjajo v enakomernem časovnem intervalu z enakim divergentnim kotom. Divergentni kot v cvetu s spiralno filotaksijo je približno 137,5 stopinj, kar kaže na vzorec, ki sledi
Fibonaccijeva serija
.Spodnja slika prikazuje spiralne vzorce filotaksije, ki imajo spiralne vzorce v smeri urinega kazalca in v nasprotni smeri urinega kazalca.
Pomembne točke, ki jih morate upoštevati:
- Fibonaccijeve vrste običajno opisujejo spirale, ki jih najdemo v naravi. Izračuna se kot niz, kjer se prejšnji par števil sešteje z naslednjim številom v nizu. Serija je 1 1 2 3 5 8 13 21 34 55 89 ….
- Dejansko obstaja en niz spiral v smeri urinega kazalca in en niz v nasprotni smeri urinega kazalca.
- Spirale cvetnih orgel sledijo nizu števca in imenovalca zamaknjenih Fibonaccijevih števil (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Števec je število krat ali obratov okoli osi, da se vrnemo na začetni izvor. Imenovalec označuje število organov, sproženih med obrati. Zato bi 2/5 pomenilo 2 obrata okoli osi in 5 organov za vrnitev v izvor.
- npr. - V boru imamo (2 3) (5 3) in (5 8) filotakse v kapitulih, najdeni pari so (21 34) (55 34) (55 89) in (89 144), na ananasih s šesterokotnimi luskami pa triplete (8 13 21) ali (13 21 34), odvisno od na velikost osebkov.
- Razširjenost Fibonaccijevega zaporedja v filotaksi se pogosto imenuje "skrivnost filotakse".
Druge vrste cvetličnih filotaksičnih aranžmajev so:
2. Kobilčasta filotaksija 3. Enostavno kobulčasta filotaksija 4. Kompleksno kobulčasta filotaksija & 5. Nepravilna filotaksija
Oblikovanje vzorca : povzetek
Lepa razporeditev listov pri nekaterih rastlinah, imenovanih filotaksija, je podrejena številnim subtilnim matematičnim odnosom. Na primer, cvetovi v glavici sončnice tvorijo dve nasprotno usmerjeni spirali: 55 jih je v smeri urinega kazalca in 34 v nasprotni smeri urinega kazalca. Presenetljivo
- Te številke so zaporedne Fibonaccijeve številke.
- Razmerja alternativnih Fibonaccijevih števil so podana s konvergenti k φ^(-2), kjer je φ zlati rez in naj bi merili delež obrata med zaporednimi listi na steblu rastline:
- npr.: 1/2 za brest in lipo 1/3 za bukev in lesko 2/5 za hrast in jablano 3/8 za topol in vrtnico 5/13 za vrbo in mandelj itd.
- Vsak nov list na rastlinskem steblu je postavljen pod določenim kotom glede na prejšnjega in da je ta kot konstanten med listi: običajno približno 137,5 stopinj.
To pomeni, da če pogledate rastlino od zgoraj navzdol in izmerite kot med črto, ki poteka od stebla do lista, in ustrezno črto za naslednji list, boste ugotovili, da je na splošno fiksen kot, ki se imenuje divergenčni kot. Tu nas zanima spiralna filotaksija in kodirali bomo, da bomo oblikovali vzorec spiralne filotaksije v pythonu z uporabo grafike želve.
Oblikovanje kode
- Kodirali bomo dve funkciji, eno za risanje vzorca filotaksije in drugo za risanje cvetnih listov.
- Cvetne liste je treba narisati šele potem, ko je vzorec filotakse končan. Zato bomo poklicali funkcijo drawPetal() znotraj funkcije drawPhyllPattern() z zadnjimi koordinatami x & y, ki bodo obiskane po risanju vzorca filotakse.
- Funkcija drawPetal() bo narisala cvetne liste z referenčnimi funkcijami in funkcijami želve Programiranje želve .
Za kodiranje vzorca filotakse moramo slediti tem enačbam:
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)
Psevdokoda: Vzorec filotaksije
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 idleIzhod:
Vzorci filotaksije.
![]()
Ustvari kviz