Đệ quy tam giác Sierpinki Python

Đệ quy có thể tạo ra những hình ảnh đẹp và đáng kinh ngạc có các phần con giống nhau. Các thiết kế được gọi là fractals. Một trong những fractal nổi tiếng nhất là tam giác Sierpinki, được đặt tên theo nhà toán học người Ba Lan Waclaw Sierpinski [1882–1969]

Cũng như nhiều mẫu tự tương tự, nó được định nghĩa đệ quy

  • Một tam giác Sierpinki có thứ tự 0 là một tam giác được lấp đầy
  • Một tam giác Sierpinki bậc n, trong đó n > 0, bao gồm ba tam giác Sierpinki bậc n – 1, có độ dài các cạnh bằng một nửa độ dài các cạnh ban đầu, được sắp xếp sao cho chúng cắt nhau từ góc này sang góc khác

Ví dụ: đây là hình tam giác Sierpinki của một vài đơn đặt hàng đầu tiên.

Hãy dành một chút thời gian để xác nhận rằng tam giác Sierpinki bậc 1 thực sự bao gồm ba bản sao nhỏ hơn của tam giác Sierpinki bậc 0, rằng tam giác Sierpinki bậc 2 được hình thành từ ba bản sao nhỏ hơn của tam giác Sierpinki bậc 1, v.v.

Mặc dù các hình tam giác bậc cao có thể trông giống như chúng ta đã vẽ một hình tam giác lớn màu đen với nhiều hình tam giác màu trắng lộn ngược khác nhau ở trên, nhưng thực tế không phải vậy. Mỗi hình tam giác được vẽ là màu đen; . Mã của bạn chỉ nên vẽ các hình tam giác màu đen đã điền. Các phần màu trắng là “không gian âm” hoặc các vùng không có gì được vẽ

Bạn phải thực hiện chức năng

int drawSierpinskiTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three, int order]

trong đó lấy đầu vào là ba điểm góc của một tam giác và thứ tự. Hàm vẽ một tam giác Sierpinki được xác định bởi ba điểm góc đó và theo thứ tự đã chỉ định. Giá trị trả về từ drawSierpinskiTriangle là tổng số hình tam giác màu đen được vẽ. Mặc dù có thể tính trực tiếp số lượng hình tam giác bằng một công thức đơn giản, nhưng thay vào đó, chúng tôi muốn bạn áp dụng phương pháp đệ quy để tính tổng số lượng từ các lệnh gọi đệ quy

Chúng tôi cung cấp hàm trợ giúp fillBlackTriangle để điền vào một hình tam giác được xác định bởi ba điểm góc của nó

void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]

Sổ tay

  • Vẽ tranh. Một phần quan trọng là tìm ra vị trí cho từng góc của tam giác và điều đó sẽ dễ dàng thực hiện hơn với sơ đồ trước mặt bạn
  • Trung điểm của mỗi cạnh của tam giác lớn bên ngoài trở thành một góc của một trong những tam giác bên trong nhỏ hơn. Cho một đoạn thẳng có hai đầu mút là {x1, y1}{x2, y2}, trung điểm của nó là
    void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
    
    0
  • Ba điểm góc của tam giác có thể được đặt tùy ý. Chúng không nhất thiết phải tạo thành một tam giác đều và đáy không phải song song với đáy cửa sổ. Việc lựa chọn góc nào được xác định là
    void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
    
    1 so với
    void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
    
    2 so với
    void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
    
    3 là hoàn toàn tùy ý
  • Cấu trúc
    void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
    
    0 được sử dụng để chỉ định tọa độ x, y trong cửa sổ đồ họa. Đây là tài liệu về GPoint. Ngoài ra còn có một số mã mẫu điều khiển GPoints trong [Bài giảng Thứ Sáu về fractals][09-recursion2]
  • Chức năng vẽ duy nhất bạn cần là fillBlackTriangle do chúng tôi cung cấp. Bạn không cần phải đào sâu vào bất kỳ chức năng vẽ nào khác trong thư viện Stanford

đồ họa thử nghiệm

Một chức năng tạo ra đầu ra đồ họa, chẳng hạn như Sierpinki, không cho phép thử nghiệm đơn vị, vì vậy chúng tôi đã cung cấp một bản trình diễn GUI đơn giản mà bạn có thể sử dụng để thử nghiệm tương tác. Mã khởi động cho

void fillBlackTriangle[GWindow& gw, GPoint one, GPoint two, GPoint three]
2 chứa một bài kiểm tra được cung cấp để chạy bản trình diễn GUI của chúng tôi. Không sửa đổi bài kiểm tra được cung cấp này. Chạy thử nghiệm này sẽ hiển thị một cửa sổ đồ họa để kiểm tra tương tác bản vẽ fractal của bạn. Xem đoạn phim ghi hình này để xem minh họa hoạt động của GUI

Trong GUI, sử dụng thanh trượt để thay đổi thứ tự và kéo các góc để thay đổi kích thước tam giác. Bạn sẽ tùy thuộc vào việc kiểm tra trực quan tính chính xác của bản vẽ và xác nhận rằng số lượng hình tam giác được trả về là như mong đợi. Khi bạn kiểm tra xong, hãy đóng cửa sổ đồ họa để thoát khỏi GUI

Tiện ích mở rộng

Tam giác Sierpinki chỉ là một trong nhiều hình ảnh tự đồng dạng; . Chúng tôi muốn xem những gì bạn tạo ra

Bolzano
Con én không tải

Bài đăng. 1

Chủ đề. 1

Đã tham gia. Tháng 3 năm 2021

Danh tiếng. 0

#1

23-03-2021, 07. 40 PM [Bài đăng này đã được sửa đổi lần cuối. 24-03-2021, 09. 49 giờ sáng tới Bolzano. ]

Xin chào,
Tôi mới bắt đầu lập trình trong python [hoàn toàn mới bắt đầu lập trình] và tôi muốn nhờ bạn giúp đỡ.

Đây là vấn đề của tôi.
Tôi đang cố lập trình tam giác Sierpinki cho n lần lặp. Đây là những gì tôi đã nhận được cho đến nay.

import numpy as np
from math import sqrt

#               a       b           c
P = np.array[[[0, 0], [1, 0], [1, [1/sqrt[2]]]], dtype=float]

# I could start with any point, but decided to start with a
a = np.array[[0, 0], dtype=float]

new_point: #1.iteration
#    a   +  b
p1 = P[0] + P[1] new_point #2.iteration
                 t1 = P[0] + p1 
                 t2 = P[1] + p1  
                 t3 = P[2] + p1   
#    b   +  c 
p2 = P[1] + P[2] new_point #2.iteration
                 t4 = P[0] + p2 
                 t5 = P[1] + p2 
                 t6 = P[2] + p2 
#    c   +  a
p3 = P[2] + P[0] new_point #2.iteration
                 t7 = P[0] + p3 
                 t8 = P[1] + p3 
                 t9 = P[2] + p3 
Vấn đề của tôi là viết tất cả những điều này theo cú pháp đệ quy trong python [đệ quy là bắt buộc].




Tôi còn vẽ mọi thứ ra giấy nên tôi hiểu thuật toán, nhưng không biết viết cú pháp như thế nào.

Còn việc vẽ đồ thị cho tất cả các điểm thì sao? . zeros[], nhưng người ta giải thích rằng đây là một hàm dành cho ma trận, vì vậy tôi không chắc cách triển khai hàm này vào chương trình.

Bạn có thể giúp gì không?

Đáp lại

Tìm thấy

Đáp lại

deanhystad
Cân như con vịt

Bài đăng. 4.386

Chủ đề. 16

Đã tham gia. Tháng 2 năm 2020

Danh tiếng. 259

#2

24-Mar-2021, 02. 37 PM [Bài đăng này đã được sửa đổi lần cuối. 24-03-2021, 02. 37 PM by deanhystad. ]

Tại sao bạn lại sử dụng numpy? .

Bạn có thể viết mã giải quyết vấn đề trong 1 lần lặp không? . Khi bạn có mã tính toán ba hình tam giác giống nhau, phần đệ quy rất đơn giản.

Đáp lại

Tìm thấy

Đáp lại

SheeppOSU
Bộ trưởng của những bước đi ngớ ngẩn

Bài đăng. 481

Chủ đề. 86

Đã tham gia. Tháng 2 năm 2018

Danh tiếng. 21

#3

03-04-2021, 06. 11 giờ sáng [Bài đăng này đã được sửa đổi lần cuối. 03-04-2021, 06. 11 giờ sáng bởi SheeppOSU. ]

Mình sẽ viết hàm lấy 3 điểm cho tam giác, lấy 3 điểm cho tam giác nằm trong nó để được 3 bộ 3 điểm như vậy. [A, p1, p3], [B, p1, p2], [C, p2, p3]. Sau đó, nó tự thực hiện với mỗi bộ ba điểm. Bạn có thể tìm ra những việc cần làm với các điểm và cách yêu cầu chương trình dừng lại.

Mã ví dụ. [Nhân tiện, mã gần như chưa được kiểm tra]

import numpy as np
from math import sqrt


def recursive[points]:
    p1 = [points[0] + points[1]] / 2
    p2 = [points[1] + points[2]] / 2
    p3 = [points[2] + points[0]] / 2
    for p_set in np.array[[points[0], p1, p3], [points[1], p1, p2], [points[2], p3, p2]]:
        recursive[p_set]


recursive[np.array[[[0, 0], [1, 0], [1, 1/sqrt[2]]]]]

Đáp lại

Tìm thấy

Đáp lại

Tam giác Sierpinki được đệ quy như thế nào?

Mã nguồn [tam giác Sierrapinki] . The algorithm starts with the vertices of a triangle and subdivides this triangle into three smaller triangles in the subdivide function. Sau đó, hàm chia nhỏ tự gọi đệ quy cho từng tam giác mới và lặp lại quy trình.

Công thức cho tam giác Sierpinki là gì?

Có thể tìm thấy diện tích của một lần lặp nhất định của Tam giác Sierpinki bằng cách sử dụng Công thức Tam giác Sierpinki cho diện tích. An=√34[34]n A n = 3 4 [ 3 4 ] n , trong đó n n là bước lặp mong muốn, tính từ n=0 n = 0 , trong đó bước 0 là toàn bộ tam giác đều ban đầu.

Chủ Đề