Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Mô hình Phyllotaxis (Phyllotactic Pattern) trong Python

Mô hình Phyllotaxis là gì?

Quay lại các bài học thực vật học và thế giới thực vật, phyllotaxis (phân cành) có nghĩa là sự sắp xếp của hoa, lá hoặc hạt trên thân cây, tương tự như xoáy Fibonacci. Dựa trên dãy Fibonacci, xoáy Fibonacci là một tập hợp các số tuân theo mẫu tương tự như tam giác Pascal. Các số trong dãy Fibonacci như sau: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, v.v. Vì vậy, số Fibonacci là tổng của hai số trước đó.

Xoáy Fibonacci

Chúng ta thường tìm kiếm sự đối xứng và mẫu để hiểu các vật thể xung quanh. Không nhận ra, mắt chúng ta đang nhìn thấy các dãy Fibonacci, hoặc trong trường hợp của đầu hoa hướng dương, một xoáy Fibonacci.

Giải pháp

Mô hình Phyllotaxis (Phyllotactic Pattern) trong Python


Mô hình Phyllotaxis (Phyllotactic Pattern) trong Python

Xoáy hoa hướng dương

Mã ví dụ

import math
import turtle

def PhyllotacticPattern(t, petalstart, angle=137.508, size=2, cspread=4):
    """In mẫu vòng tròn bằng dữ liệu phyllotactic xoáy"""
    # Khởi tạo vị trí
    turtle.pen(outline=1, pencolor="black", fillcolor="orange")
    # turtle.color("orange")
    phi = angle * (math.pi / 180.0)
    xcenter = 0.0
    ycenter = 0.0
    # Vòng lặp for chạy từ giá trị đầu tiên cho đến < 4
    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
        # Di chuyển rùa đến vị trí đó và vẽ
        turtle.up()
        turtle.setpos(x, y)
        turtle.down()
        # Căn chỉnh hướng rùa đúng cách
        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(25)
    turtle.forward(100)
    turtle.left(45)
    turtle.forward(100)
    turtle.left(140)
    turtle.forward(100)
    turtle.left(45)
    turtle.forward(100)
    turtle.up()
    turtle.end_fill()

# Cần thiết để hoàn thành cánh hoa cuối cùng
turtle.shape("turtle")
turtle.speed(0)  # Cho rùa chạy nhanh nhất có thể
PhyllotacticPattern(200, 160, 137.508, 4, 10)
turtle.exitonclick()  # Cho phép thoát cửa sổ khi click ra ngoài (ngoài idle)

Kết quả

Mô hình Phyllotaxis (Phyllotactic Pattern) trong Python

Với một chút thay đổi trong chương trình trên, kết quả có thể hiển thị như sau (tùy chỉnh màu và thay đổi một số giá trị):

Mô hình Phyllotaxis (Phyllotactic Pattern) trong Python