Phylotaxis modelis Python | Algoritminės botanikos vienetas
Filotaksija / filotaksija yra lapų išsidėstymas ant augalo stiebo, o filotaksinės spiralės sudaro išskirtinę gamtos raštų klasę. Pats žodis kilęs iš graikų kalbos phullon, reiškiančio „lapas“, ir taksi, reiškiančio „išdėstymas“. Pagrindinės gėlių filotaksinės kompozicijos apima:
1. Spiralinė filotaksė –
Spiralinėje filotaksijoje atskiri gėlių organai sukuriami reguliariais laiko intervalais su tuo pačiu skirtingu kampu. Skirtingas kampas gėlėje su spiraline filotaksija yra maždaug 137,5 laipsnio, o tai rodo modelį, kuris seka
Fibonačio serija
. Toliau pateiktame paveikslėlyje pavaizduoti spiraliniai filotaksijos raštai, turintys ir pagal laikrodžio rodyklę, ir prieš laikrodžio rodyklę.
Svarbūs punktai, į kuriuos reikia atkreipti dėmesį:
- Fibonačio serijoje paprastai aprašomos gamtoje randamos spiralės. Jis apskaičiuojamas kaip serija, kurioje ankstesnė skaičių pora sumuojasi į kitą serijos skaičių. Serija yra 1 1 2 3 5 8 13 21 34 55 89 … .
- Iš tikrųjų yra vienas spiralių rinkinys pagal laikrodžio rodyklę ir vienas prieš laikrodžio rodyklę.
- Gėlių vargonų spiralės seka poslinkių Fibonačio skaičių skaitiklio ir vardiklio rinkinį (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Skaitiklis yra kartų arba apsisukimų aplink ašį skaičius, norint grįžti į iniciacijos pradžią. Vardiklis rodo posūkių metu inicijuotų organų skaičių. Todėl 2/5 reikštų 2 apsisukimus aplink ašį ir 5 organus, kad grįžtų į pradinę vietą.
- pvz. - Pušyje turime (2 3) (5 3) ir (5 8) filotaksus kapituliuose, randamos poros (21 34) (55 34) (55 89) ir (89 144), o ant ananasų su šešiakampėmis žvyneliais randami trynukai (8 1) arba 13, priklausomai nuo dydžio (14212) iš egzempliorių.
- Fibonačio sekos paplitimas filotaksėje dažnai vadinamas „filotaksės paslaptimi“.
Kiti gėlių filotaksinių kompozicijų tipai yra:
2. Sūkurinė filotaksė 3. Paprastoji skilvelė
Rašto formavimas: santrauka
Gražus kai kurių augalų lapų išdėstymas, vadinamas filotaksiu, paklūsta daugybei subtilių matematinių ryšių. Pavyzdžiui, žiedynai saulėgrąžų galvoje sudaro dvi priešingos krypties spirales: 55 iš jų pagal laikrodžio rodyklę ir 34 prieš laikrodžio rodyklę. Stebėtina
- Šie skaičiai yra iš eilės einantys Fibonačio skaičiai.
- Alternatyvių Fibonačio skaičių santykiai pateikiami konvergentais į φ^(-2), kur φ yra aukso pjūvis ir sakoma, kad jie matuoja posūkio dalį tarp nuoseklių lapų ant augalo stiebo:
- pvz.: 1/2 guobai ir liepai 1/3 bukui ir lazdynui 2/5 ąžuolui ir obuoliui 3/8 tuopoms ir rožėms 5/13 gluosniams ir migdolams ir kt.
- Kiekvienas naujas augalo stiebo lapas yra tam tikru kampu prieš ankstesnįjį ir šis kampas tarp lapų yra pastovus: paprastai apie 137,5 laipsnio.
Tai yra, jei pažvelgsite į augalą iš viršaus ir išmatuotumėte kampą tarp linijos, nubrėžtos nuo stiebo iki lapo, ir atitinkamos kito lapo linijos, pamatysite, kad paprastai yra fiksuotas kampas, vadinamas nukrypimo kampu. Čia mus domina spiralinė filotaksija ir mes koduosime, kad sudarytume spiralinės filotaksijos modelį python, naudojant vėžlių grafiką.
Kodo projektavimas
- Užkoduosime dvi funkcijas, iš kurių viena nupieštų filotaksijos modelį, o kita – žiedlapiams.
- Žiedlapius reikia nubraižyti tik užbaigus filotaksės modelį. Taigi funkciją drawPhyllPattern() iškviesime iš funkcijos drawPhyllPattern() vidaus, kai nubraižę filotaksi modelį bus aplankytos paskutinės x & y koordinatės.
- Funkcija drawPetal() nupieš žiedlapius su vėžlio funkcijomis ir funkcijomis Vėžlių programavimas .
Norėdami koduoti filotaksės modelį, turime vadovautis šiomis lygtimis:
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)
Pseudokodas: Filotaksis modelis
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 idleIšvestis:
Filotaksės modeliai.
![]()
Sukurti viktoriną