Phyllotaxis minta Pythonban | Az algoritmikus botanika egysége
A filotaxis/fillotaxia a levelek elrendezése a növényi száron, és a Phyllotactic spirálok a természetben a minták jellegzetes osztályát alkotják. Maga a szó a görög phullon szóból származik, ami 'levél', és taxis jelentése 'elrendezés'.
1. Spirális Phyllotaxis -
A spirális filotaxisban az egyes virágszervek szabályos időintervallumban, azonos divergens szögben jönnek létre. A divergens szög egy spirális filotaxisú virágban megközelítőleg 137,5 fok, ami azt jelzi, hogy egy mintát követ
Fibonacci sorozat
.Az alábbi képen a spirális filotaxis minták láthatók az óramutató járásával megegyező és az óramutató járásával ellentétes irányú spirálmintákkal.
Fontos tudnivalók:
- A Fibonacci sorozatok jellemzően a természetben található spirálokat írják le. Kiszámítása olyan sorozatként történik, ahol az előző számpár összege a sorozat következő számává válik. A sorozat 1 1 2 3 5 8 13 21 34 55 89 … .
- Valójában van egy spirálkészlet az óramutató járásával megegyező irányban és egy az óramutató járásával ellentétes irányban.
- A virágos orgonaspirálok az eltolt Fibonacci-számok számláló- és nevezőkészletét követik (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). A számláló az a szám, ahányszor vagy megfordul a tengely körül, hogy visszatérjen a kezdeti origóhoz. A nevező a fordulatok során beindított szervek számát jelzi. Ezért a 2/5 2 tengely körüli fordulatot és 5 szervet jelent az origóba való visszatéréshez.
- pl. - A fenyőben (2 3) (5 3) és (5 8) filotaxok vannak capituliban, a talált párok a következők: (21 34) (55 34) (55 89) és (89 144), a hatszögletű ananászokon pedig a hármasikrek (8 12 vagy 13 mérettől függően) a példányok közül.
- A Fibonacci-szekvencia előfordulását a filotaxisban gyakran „a filotaxis rejtélyének” nevezik.
A virágos filotaxiás elrendezések egyéb típusai a következők:
2. Worled Phyllotaxis 3. Simple-whorled Phyllotaxis 4. Complex-whorled Phyllotaxis & 5. Irregular Phyllotaxis
A minta kialakulása: Összegzés
Néhány növény leveleinek gyönyörű elrendezése, amelyet filotaxisnak neveznek, számos finom matematikai összefüggésnek engedelmeskedik. Például egy napraforgó fejében a virágok két egymással ellentétes irányú spirált alkotnak: 55-öt az óramutató járásával megegyezően, 34-et az óramutató járásával ellentétes irányban. Meglepően
- Ezek a számok egymást követő Fibonacci-számok.
- Az alternatív Fibonacci-számok arányát a φ^(-2)-hez konvergensek adják meg, ahol φ a aranymetszés és azt mondják, hogy megmérik a fordulat hányadát az egymást követő levelek között a növény szárán:
- pl.: 1/2 szilnak és hársnak 1/3 bükknek és mogyorónak 2/5 tölgynek és almának 3/8 nyárnak és rózsának 5/13 fűznek és mandulának stb.
- A növényi száron minden új levél bizonyos szöget zár be az előzőhöz képest, és ez a szög a levelek között állandó: általában körülbelül 137,5 fok.
Ez azt jelenti, hogy ha felülről lenézünk a növényre, és megmérjük a szártól a levélig húzott vonal és a következő levél megfelelő vonala közötti szöget, akkor azt találjuk, hogy általában van egy rögzített szög, amelyet divergencia szögnek nevezünk. Itt a spirális phyllotaxy érdekel minket, és teknős grafikával spirális filotaxia mintát fogunk kódolni pythonban.
A kódex tervezése
- Két függvényt kódolunk, az egyik a filotaxis minta, a másik pedig a szirmok rajzolásához.
- A szirmokat csak a filotaxis minta befejezése után kell megrajzolni. Tehát a drawPhyllPattern() függvény belsejéből fogjuk meghívni a drawPetal() függvényt úgy, hogy a Phyllotaxis minta megrajzolása után az utolsó x & y koordinátákat keressük fel.
- A drawPetal() függvény a szirmokat teknős függvényekkel és jellemzőkkel rajzolja meg Teknős programozás .
A filotaxis mintázat kódolásához követnünk kell az alábbi egyenleteket:
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)
PseudoCode: Phyllotaxis minta
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 idleKimenet:
Phyllotaxis minták.
![]()
Kvíz létrehozása