Chuỗi Steiner là một tập hợp N vòng tròn trong đó mỗi vòng tròn tiếp xúc với 2 vòng tròn không giao nhau khác cũng như các vòng tròn trước và vòng tiếp theo của chuỗi, như được thấy trong hình ảnh dưới đây:
Trong thử thách này, bạn sẽ viết một chương trình / hàm rút ra các chuỗi Steiner theo cách đệ quy, nghĩa là các vòng tròn của một chuỗi đã cho sẽ là các vòng tròn cơ sở của một chuỗi lặp khác:
Thử thách
Viết chương trình / hàm chấp nhận kích thước hình ảnh và danh sách các số nguyên biểu thị mức độ của các vòng tròn trong mỗi lần lặp chuỗi liên tiếp và xuất ra hình ảnh với chuỗi Steiner đệ quy được vẽ cho nó.
Đầu vào
Chương trình / hàm của bạn sẽ chấp nhận 2 đối số:
s
- chiều rộng và chiều cao của hình ảnhls
- danh sách các số nguyên dương biểu thị số lượng vòng tròn có trong mỗi lần lặp liên tiếp của chuỗi, được sắp xếp từ chuỗi cao nhất đến chuỗi dưới cùng nhất
Đầu ra
Chương trình / chức năng của bạn sẽ xuất ra hình ảnh có kích thước s
x s
hiển thị chuỗi Steiner lặp lại.
- Vòng tròn cơ sở cấp cao nhất sẽ lớn bằng hình ảnh với đường kính
s
, chính giữa bên trong hình ảnh - Để làm cho mọi thứ dễ dàng, 2 vòng tròn cơ sở của chuỗi Steiner sẽ đồng tâm, nghĩa là các điểm trung tâm của 2 vòng tròn cơ sở sẽ giống nhau
- Cho bán kính ngoài
R
và số vòng tròn trong chuỗi,N
công thức cho bán kính bên trongR'
làR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- Các vòng tròn của chuỗi cũng như vòng tròn cơ sở bên trong sẽ là các vòng tròn cơ sở bên ngoài của lần lặp tiếp theo của chuỗi
- Trong khi đệ quy qua các vòng tròn chuỗi, thứ tự của chuỗi tiếp theo sẽ tương ứng với giá trị tiếp theo trong
ls
- Trong khi đệ quy qua vòng tròn bên trong của chuỗi, thứ tự phải giống với thứ tự cha mẹ của chuỗi (ví dụ [5,2]):
- Tất cả các chuỗi nên kết thúc đệ quy ở độ sâu của chiều dài
ls
- Vòng quay của chuỗi không quan trọng:
- Tuy nhiên, các phép quay của chuỗi đệ quy so với tâm điểm cha mẹ của chúng phải giống nhau:
- Tất cả các vòng tròn nên được vẽ bằng một phác thảo hoặc điền rắn
- Lựa chọn màu sắc được để lại cho việc thực hiện, tiết kiệm cho các sơ hở (ví dụ: lấp đầy mọi thứ với cùng một màu)
Chạy ví dụ
Trong các ví dụ sau, màu sắc được xác định bởi (depth of the recursion)^4
.
Bạn có thể tìm nguồn ở đây .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])