Wzorzec filotaksji w Pythonie | Jednostka botaniki algorytmicznej
Fillotaksja/filotaksja to ułożenie liści na łodydze rośliny, a spirale filotaktyczne tworzą charakterystyczną klasę wzorów w przyrodzie. Samo słowo pochodzi od greckiego słowa phullon oznaczającego „liść” i taksówki oznaczającego „układ”. Do podstawowych kompozycji kwiatowych filotaksyjnych zalicza się:
1. Fillotaksja spiralna -
W filotaksji spiralnej poszczególne narządy kwiatowe powstają w regularnych odstępach czasu pod tym samym rozbieżnym kątem. Kąt rozbieżny w kwiacie z filotaksją spiralną wynosi w przybliżeniu 137,5 stopnia, co wskazuje na wzór, który podąża za
Szereg Fibonacciego
Poniższy obrazek przedstawia spiralne wzory filotaksji, posiadające zarówno spiralne wzory zgodne z ruchem wskazówek zegara, jak i przeciwne do ruchu wskazówek zegara.
Ważne punkty, na które należy zwrócić uwagę:
- Szereg Fibonacciego zazwyczaj opisuje spirale występujące w przyrodzie. Oblicza się ją jako serię, w której poprzednia para liczb sumuje się do następnej liczby w serii. Seria to 1 1 2 3 5 8 13 21 34 55 89… .
- W rzeczywistości istnieje jeden zestaw spiral w kierunku zgodnym z ruchem wskazówek zegara i jeden zestaw w kierunku przeciwnym do ruchu wskazówek zegara.
- Spirale organów kwiatowych podążają za zestawem liczników i mianowników przesuniętych liczb Fibonacciego (1/2 1/3 2/5 3/8 5/13 8/21 13/34…). Licznik to liczba obrotów lub obrotów wokół osi, aby powrócić do punktu początkowego. Mianownik wskazuje liczbę narządów inicjowanych podczas zwojów. Dlatego 2/5 oznaczałoby 2 obroty wokół osi i 5 narządów, aby powrócić do punktu początkowego.
- np. - W sosnie mamy (2 3) (5 3) i (5 8) filotaksy in capituli znalezione pary to (21 34) (55 34) (55 89) i (89 144), a na ananasach z sześciokątnymi łuskami znajdują się trojaczki (8 13 21) lub (13 21 34) w zależności od wielkości próbki .
- Występowanie ciągu Fibonacciego w filotaksji jest często określane jako „tajemnica filotaksji”.
Inne rodzaje kompozycji kwiatowych filotaktycznych to:
2. Fillotaksja okółkowa 3. Filotaksja o prostych okółkach 4. Fillotaksja o złożonych okółkach i 5. Fillotaksja nieregularna
Tworzenie wzoru: podsumowanie
Piękny układ liści u niektórych roślin, zwany filotaksją, podlega szeregowi subtelnych zależności matematycznych. Na przykład różyczki w główce słonecznika tworzą dwie przeciwnie skierowane spirale: 55 zgodnie z ruchem wskazówek zegara i 34 przeciwnie do ruchu wskazówek zegara. Zaskakująco
- Liczby te są kolejnymi liczbami Fibonacciego.
- Stosunki alternatywnych liczb Fibonacciego są podane przez zbieżności do φ^(-2), gdzie φ jest złoty podział i mówi się, że mierzą ułamek obrotu pomiędzy kolejnymi liśćmi na łodydze rośliny:
- np.: 1/2 dla wiązu i lipy 1/3 dla buku i leszczyny 2/5 dla dębu i jabłoni 3/8 dla topoli i róży 5/13 dla wierzby i migdałów itp.
- Każdy nowy liść na łodydze rośliny jest ustawiony pod pewnym kątem w stosunku do poprzedniego i aby kąt ten był stały pomiędzy liśćmi: zwykle około 137,5 stopnia.
Oznacza to, że jeśli spojrzysz na roślinę z góry i zmierzysz kąt utworzony pomiędzy linią poprowadzoną od łodygi do liścia a odpowiadającą linią następnego liścia, przekonasz się, że ogólnie rzecz biorąc istnieje stały kąt zwany kątem rozbieżności. Tutaj jesteśmy zainteresowani filotaksją spiralną i będziemy kodować, aby utworzyć wzór filotaksji spiralnej w Pythonie przy użyciu grafiki żółwia.
Projektowanie Kodeksu
- Zakodujemy dwie funkcje, jedną do rysowania wzoru filotaksji, a drugą do rysowania płatków.
- Płatki należy narysować dopiero po ukończeniu wzoru filotaksji. Dlatego wywołamy funkcję remisPetal() z wnętrza funkcji remisPhyllPattern() z ostatnimi współrzędnymi x i y odwiedzanymi po narysowaniu wzoru filotaksji.
- Funkcja remisPetal() narysuje płatki z funkcjami i cechami żółwia Programowanie żółwia .
Aby zakodować wzór filotaksji, musimy postępować zgodnie z następującymi równaniami:
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)
Pseudokod: Wzór filotaksji
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 idleWyjście:
Wzory filotaksji.
![]()
Utwórz quiz