Sebuah epicycloid adalah kurva titik pada lingkaran membuat seperti gulungan sekitar lingkaran lain. Sebuah cyclogon adalah bentuk titik pada poligon beraturan membuat seperti gulungan di pesawat. Sebuah epicyclogon adalah kurva dilacak oleh titik pada satu poligon beraturan seperti gulungan sekitar lain.
Menulis sebuah program yang menarik sebuah epicyclogon diberikan r
, r1
, r2
, n1
, n2
:
r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values)
r1 = distance from center of stationary polygon to each of its vertices (positive real number)
r2 = distance from center of rolling polygon to each of its vertices (positive real number)
n1 = number of sides stationary polygon has (integer greater than 2)
n2 = number of sides rolling polygon has (integer greater than 2)
Catatan
- Bila
r
negatif, roller harus berlawanan arah jarum jam . - Sebab
r
, satu revolusi terjadi ketika garis yang menghubungkan centroid dari dua bentuk menyapu 360 derajat penuh. Gagasan ini diperluas untuk mencakup semua nilair
. (Jadi dalam seperempat revolusi garis yang menghubungkan centroid menyapu 90 derajat.) - Argumen ini harus berasal dari baris perintah atau program Anda harus meminta mereka (misalnya dengan Python
input()
). r1
danr2
relatif satu sama lain, bukan dimensi gambar. Jadi, Anda dapat mengatur satu "unit" menjadi sejumlah piksel aktual.
Poin yang harus Anda lacak adalah salah satu simpul dari bentuk penggulungan. Bentuk harus dimulai dengan titik ini menyentuh titik diam dan dua sisi yang berdekatan:
Verteks awal yang tepat dan sudut poligon stasioner tidak masalah.
Keluaran
Output harus pergi ke gambar yang setidaknya 600x600 piksel (atau beberapa dimensi variabel daripada yang dapat diatur ke 600). Itu harus menunjukkan seluruh kurva epicyclogon yang ditentukan oleh parameter, dibingkai dengan baik dalam gambar.
Poligon bergulir dan stasioner juga harus digambar (dengan roller dalam keadaan akhir itu). Dua bentuk dan epicyclogon haruslah tiga warna yang sangat berbeda.
Harus juga ada cara sederhana untuk tidak menggambar poligon (perubahan true
ke false
dalam kode sudah mencukupi).
Tolong tunjukkan kepada kami setidaknya 2 gambar output. Tidak masalah untuk mengecilkannya jika perlu.
Mencetak gol
Kode terpendek yang menghasilkan gambar output yang valid menang.
Bonus
- Mengurangi 50 byte jika outputnya berupa animasi gif (atau serupa) dari kurva yang sedang digambar.
- Minus 150 byte jika Anda membiarkan
n1
dann2
mengambil nilai 2 sehingga bentuk menjadi segmen garis panjang2 * r1
(ataur2
), "berguling" di sekitar satu sama lain. Bagaimana Anda menanganir
kapann1
dann2
2 tergantung Anda karena centroid tidak berputar satu sama lain seperti yang mereka lakukan dalam kasus lain. (Tidak "menggulung" sama sekali tidak termasuk penanganannya.)
Karena saya sangat ingin melihat ide novel ini dieksekusi dengan baik (dan itu bukan cakewalk), saya akan memberikan 150 perwakilan hadiah kepada pemenang. Kontes akan berakhir pada hari yang sama ketika hadiah habis.
Hadiah tidak akan diberikan kepada pemenang jika jelas bahwa mereka hanya menulis ulang sebagian besar kode dari pengajuan lain.
Fungsi perpustakaan yang sudah melakukan ini (jika ada) tidak diizinkan.
Catatan: Ini datang dari pertanyaan sisa saya yang bebas dikirim oleh siapa pun. Tetapi jika tidak ada orang lain yang mempostingnya, ada kemungkinan saya akan tepat waktu. : P