Rantai Steiner adalah seperangkat lingkaran N di mana setiap lingkaran bersinggungan dengan 2 lingkaran non-berpotongan lainnya serta lingkaran sebelumnya dan berikutnya dari rantai, seperti terlihat pada gambar di bawah:
Dalam tantangan ini, Anda akan menulis sebuah program / fungsi yang menarik rantai Steiner secara rekursif, yaitu lingkaran rantai yang diberikan akan menjadi lingkaran dasar dari iterasi rantai yang lain:
Tantangan
Tulis program / fungsi yang menerima dimensi gambar dan daftar bilangan bulat yang menunjukkan tingkat lingkaran dalam setiap iterasi rantai yang berurutan, dan hasilkan gambar dengan rantai Steiner rekursif yang digambar padanya.
Memasukkan
Program / fungsi Anda akan menerima 2 argumen:
s
- Lebar dan tinggi gambarls
- daftar bilangan bulat positif yang menunjukkan jumlah lingkaran yang hadir dalam setiap iterasi rantai yang berurutan, dipesan dari rantai teratas hingga rantai terbawah
Keluaran
Program / fungsi Anda akan menampilkan gambar dimensi s
x yang s
menampilkan rantai Steiner recusive.
- Lingkaran dasar tingkat atas akan sebesar gambar dengan diameter
s
, berpusat di dalam gambar - Untuk mempermudah, 2 lingkaran dasar dari rantai Steiner akan konsentris, yaitu, titik pusat dari 2 lingkaran dasar akan sama
- Diberikan jari-jari luar
R
,, dan jumlah lingkaran dalam sebuah rantai,N
rumus untuk jariR'
- jari dalam adalahR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- Lingkaran rantai serta lingkaran dasar bagian dalam akan menjadi lingkaran dasar luar dari iterasi rantai berikutnya
- Saat berulang melalui lingkaran rantai, urutan rantai berikutnya harus sesuai dengan nilai berikutnya di
ls
- Saat berulang melalui lingkaran dalam rantai, urutannya harus sama dengan urutan orang tuanya (contoh [5,2]):
- Semua rantai harus mengakhiri rekursi pada kedalaman panjang
ls
- Rotasi rantai tidak masalah:
- Namun, rotasi rantai rekursif relatif terhadap titik pusat orang tua mereka harus sama:
- Semua lingkaran harus digambar dengan garis besar atau isian padat
- Pilihan warna diserahkan pada implementasi, simpan untuk celah (misalnya, mengisi semuanya dengan warna yang sama)
Contoh Berjalan
Dalam contoh berikut, warna ditentukan oleh (depth of the recursion)^4
.
Anda dapat menemukan sumbernya di sini .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])
sumber
Jawaban:
Javascript ES6, 379 byte
Solusi ini digunakan untuk menghasilkan contoh berjalan dalam pertanyaan.
Tidak Disatukan:
Catatan:
f
mengembalikan kanvas.Contoh menjalankan (mengasumsikan ada
<body>
untuk menambahkan):Haruskah membuang gambar berikut ke halaman:
sumber