logo

Phyllotaxis kuvio Pythonissa | Algoritmisen kasvitieteen yksikkö

Phyllotaxis/phyllotaxy on lehtien järjestely kasvin varressa ja Phyllotactic-spiraalit muodostavat luonnossa erottuvan luokan kuvioita. Sana itsessään tulee kreikan sanasta phullon, joka tarkoittaa 'lehteä', ja taksit, joka tarkoittaa 'asetelmaa'. Kukkafylotaksisia perusasetelmia ovat mm.

1. Spiraalifilotaxis -

Spiraalifillotaksissa yksittäiset kukkaelimet syntyvät säännöllisin väliajoin samalla divergenttikulmalla. Divergentti kulma kukassa, jossa on kierrefillotaksia, on noin 137,5 astetta, mikä osoittaa kuviota, joka seuraa



Fibonacci sarja

.Alla olevassa kuvassa näkyy spiraalisia fyllotaksikuvioita, joissa on sekä myötä- että vastapäivään spiraalikuvioita.

Phyllotaxis kuvio Pythonissa | Algoritmisen kasvitieteen yksikkö


Tärkeitä huomioitavia seikkoja:

  1. Fibonacci-sarja kuvaa tyypillisesti luonnosta löytyviä spiraaleja. Se lasketaan sarjana, jossa edellinen lukupari summautuu sarjan seuraavaan numeroon. Sarja on 1 1 2 3 5 8 13 21 34 55 89 … .
  2. Itse asiassa on yksi sarja spiraaleja myötäpäivään ja yksi vastapäivään.
  3. Kukka-urkuspiraalit seuraavat Fibonacci-lukujen osoittaja- ja nimittäjäjoukkoa (1/2 1/3 2/5 3/8 5/13 8/21 13/34 …). Osoittaja on kuinka monta kertaa tai kierroksia akselin ympäri pääsee takaisin aloituksen alkupisteeseen. Nimittäjä ilmaisee kierrosten aikana aloitettujen elinten lukumäärän. Siksi 2/5 merkitsisi 2 kierrosta akselin ympäri ja 5 elintä palaamaan alkupisteeseen.
  4. esim. - Männässä on (2 3) (5 3) ja (5 8) phyllotaxia capitulissa löydetyt parit ovat (21 34) (55 34) (55 89) ja (89 144) ja kuusikulmioisilla ananaksilla kolmoset (8 13) löytyvät koosta riippuen (14212) 13. näytteistä.
  5. Fibonacci-sekvenssin esiintyvyyttä phyllotaksissa kutsutaan usein "fillotaksin mysteeriksi".


Muita kukka-fillotaksisia asetelmia ovat:

2. Pyöräfyllotaxis 3. Yksinkertainen pyörötaksi 4. Monimutkainen pyörötaksi & 5. Epäsäännöllinen phyllotaxis

Kuvion muodostuminen: Yhteenveto

Joidenkin kasvien lehtien kaunis järjestely, jota kutsutaan filotaksiksi, noudattaa useita hienovaraisia ​​matemaattisia suhteita. Esimerkiksi auringonkukan pään kukinnot muodostavat kaksi vastakkaista spiraalia: niistä 55 myötäpäivään ja 34 vastapäivään. Yllättävän

  1. Nämä luvut ovat peräkkäisiä Fibonacci-lukuja.
  2. Vaihtoehtoisten Fibonacci-lukujen suhteet saadaan konvergenttien avulla arvoon φ^(-2), jossa φ on kultainen suhde ja niiden sanotaan mittaavan kasvin varren peräkkäisten lehtien välisen kierroksen murto-osuutta:
  3. esim.: 1/2 jalavalle ja lehmukselle 1/3 pyökkille ja pähkinälle 2/5 tammelle ja omenalle 3/8 poppelille ja ruusulle 5/13 pajulle ja mantelille jne.
  4. Jokainen uusi lehti kasvin varressa on asetettu tiettyyn kulmaan edelliseen nähden ja että tämä kulma lehtien välillä on vakio: yleensä noin 137,5 astetta.

Eli jos katsot ylhäältä alas kasviin ja mittaat kulmaa, joka muodostuu varresta lehteen vedetyn viivan ja seuraavan lehden vastaavan viivan välille, huomaat, että yleensä on olemassa kiinteä kulma, jota kutsutaan erotuskulmaksi. Täällä olemme kiinnostuneita Spiral Phyllotaxysta ja koodaamme muodostamaan Spiral Phyllotaxy -kuvion pythonissa käyttämällä kilpikonnagrafiikkaa.

Koodin suunnittelu

  1. Koodaamme kaksi funktiota, joista toinen piirtää filotaksikuvion ja toinen terälehtien piirtämiseen.
  2. Terälehdet on piirrettävä vasta, kun fyllotaxis-kuvio on valmis. Joten kutsumme drawPetal()-funktiota drawPhyllPattern()-funktion sisältä, jossa viimeiset x & y-koordinaatit käydään Phyllotaxis-kuvion piirtämisen jälkeen.
  3. DrawPetal()-funktio piirtää terälehdet kilpikonnafunktioiden ja -ominaisuuksien kanssa Kilpikonnan ohjelmointi .

Fylotaxis-kuvion koodaamiseksi meidän on noudatettava näitä yhtälöitä:

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°
Phyllotaxis kuvio Pythonissa | Algoritmisen kasvitieteen yksikkö
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)

Pseudokoodi: Phyllotaxis Pattern

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 A
import 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) 
Python Pattern B
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 idle 

Lähtö:

Fyllotaksis-kuviot.

Phyllotaxis kuvio Pythonissa | Algoritmisen kasvitieteen yksikkö

Luo tietokilpailu