Bintang kertas adalah hal besar di keluarga saya saat natal, jadi saya pikir bintang virtual akan keren.
Di bawah ini adalah gambar dari dodecahedron biasa (dari https://en.wikipedia.org/wiki/Dodecahedron , dikaitkan dengan penulis yang disebutkan di sana.)
Proses stasi (wikipedia) ketika diterapkan pada polyhedron melibatkan perpanjangan wajah sampai mereka melintasi wajah lain. Maka dimulai dengan dodecahedron biasa, kita mendapatkan bentuk-bentuk berikut:
Dodecahedron Stellated Kecil, Dodecahedron Besar dan Dodecahedron Stellated Besar
Gambar dari http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.html
Ini adalah tiga kemungkinan Stellations of the dodecahedron (Wolfram). Mereka membentuk perkembangan alami dari dodecahedron, ke dodecahedron bintang kecil, dodecahedron besar dan dodecahedron bintang besar, ketika kita memperluas wajah lebih jauh dan lebih jauh.
Tugas
Program atau fungsi Anda harus menampilkan atau menampilkan ke file gambar salah satu polyhedra berikut: Dodecahedron biasa, Dodecahedron bintang kecil, Great dodecahedron atau Great Stellated Dodecahedron .
Skema warna harus seperti gambar kedua di atas. Masing-masing dari enam pasang wajah yang berlawanan harus merupakan salah satu dari enam warna Merah, Kuning, Hijau, Cyan, Biru, dan Magenta. Anda dapat menggunakan warna default dengan nama-nama ini dalam bahasa Anda atau dokumentasinya, atau menggunakan warna FF0000, FFFF00, 00FF00, 00FFFF, 0000FF, dan FF00FF (Anda dapat mengurangi warna ini dengan mengurangi intensitas hingga minimum 75% jika diinginkan, misalnya dengan mengurangi nilai F ke nilai C.)
Perhatikan bahwa kita mendefinisikan "wajah" sebagai semua area di bidang yang sama. Jadi dalam gambar di atas wajah depan berwarna kuning (dan wajah belakang paralel juga akan berwarna kuning.)
Latar belakang harus hitam, abu-abu, atau putih. Tepi mungkin dihilangkan, tetapi harus hitam jika ditarik.
Aturan
Polyhedron yang ditampilkan harus memiliki lebar antara 500 dan 1000 piksel (lebar didefinisikan sebagai jarak maksimum antara dua simpul yang ditampilkan.)
Polyhedron yang ditampilkan harus dalam proyeksi perspektif (sudut pandang setidaknya 5 lebar dari polyhedron), atau proyeksi ortografi (efektif proyeksi perspektif dengan sudut pandang di infinity).
Polihedron harus dapat ditampilkan dari sudut manapun. (Tidak dapat diterima untuk memilih sudut yang paling mudah dan membuat bentuk 2D hardcode.) Sudut dapat ditentukan oleh pengguna dengan salah satu cara berikut:
Input dari tiga sudut yang sesuai dengan tiga rotasi, dari stdin, atau sebagai parameter fungsi atau perintah. Ini bisa berupa sudut Euler (di mana rotasi pertama dan terakhir sekitar sumbu yang sama) atau sudut Tait-Bryan (di mana masing-masing ada satu rotasi tentang sumbu x, y dan z) https://en.wikipedia.org/ wiki / Euler_angles (sederhananya, apa pun berlangsung selama setiap rotasi adalah tentang sumbu x, y, atau z dan rotasi berturut-turut adalah sumbu tegak lurus.)
Fasilitas bagi pengguna untuk memutar polyhedron dalam langkah-langkah tidak lebih dari 10 derajat tentang sumbu x dan y dan menyegarkan tampilan, setiap kali jumlah sewenang-wenang (dengan asumsi sumbu z tegak lurus terhadap layar).
Polyhedron harus solid, bukan rangka gambar.
Tidak ada bawaan untuk menggambar polyhedra diizinkan (Saya melihat Anda, Mathematica!)
Mencetak gol
Ini adalah codegolf. Kode terpendek dalam byte menang.
Bonus
Lipat gandakan skor Anda dengan 0,5 jika Anda tidak menggunakan builtin untuk menggambar 3D.
Lipat gandakan skor Anda dengan 0,7 jika Anda dapat menampilkan ketiga stellations dari dodecahedron, dapat dipilih oleh pengguna dengan integer 1-3 yang dimasukkan dari stdin, atau dengan fungsi atau parameter baris perintah.
Jika Anda memilih kedua bonus, skor Anda akan dikalikan dengan 0,5 * 0,7 = 0,35
Info berguna (sumber seperti di bawah ini)
https://en.wikipedia.org/wiki/Regular_dodecahedron
https://en.wikipedia.org/wiki/Regular_icosahedron
Dodecahedron memiliki 20 simpul. 8 dari mereka membentuk simpul kubus dengan koordinat kartesius (x, y, z) berikut:
(± 1, ± 1, ± 1)
12 sisanya adalah sebagai berikut (phi adalah rasio emas)
(0, ± 1 / φ, ± φ)
(± 1 / φ, ± φ, 0)
(± φ, 0, ± 1 / φ)
Cembung lambung dodecahedron bintang kecil dan dodecahedron besar jelas merupakan dodecahedron biasa. Vertikal luar menggambarkan icosahedron.
Menurut Wikipedia, 12 simpul icosahedron dapat dideskripsikan dengan cara yang sama seperti permutasi siklik dari (0, ± 1, ± φ). Vertikal luar dari dodecaheron bintang kecil dan dodechahedron besar (pada skala yang sama dengan dodecahedron di atas) membentuk icosahedron yang lebih besar, di mana koordinat simpul adalah permutasi siklik dari (0, ± φ ^ 2, ± φ).
Sudut antara wajah untuk dodecahedron dan icosahedron masing-masing adalah 2 arctan (phi) dan arccos (- (√5) / 3).
Untuk kiat memutar, lihat https://en.wikipedia.org/wiki/Rotation_matrix
EDIT: Secara tidak sengaja saya telah mengizinkan dodecahedron biasa, dan tidak bisa menariknya sekarang. Bonus x0.7 untuk menggambar ketiga polyhedra yang dibintangi tetap. Pada Hari Tahun Baru saya akan mengeluarkan hadiah 100 untuk jawaban yang dapat menampilkan sebagian besar dari empat polyhedra, dengan kode terpendek sebagai penahan ikatan.
Polyhedrondatadilarang karena jelas merupakan builtin untuk menggambar polyhedra. Jika jawaban Anda tidak menggunakan builtin untuk menggambar polyhedra, dan mematuhi aturan lain, maka itu dapat diterima. Maksud Anda tampaknya adalah mengingat fakta bahwa Anda harus mewarnai wajah dengan benar, Polyhedrondatatoh tidak akan menyelamatkan Anda banyak, jadi dalam praktiknya mungkin menjadi pembatasan yang agak sewenang-wenang. Saya setuju sampai batas tertentu, tetapi itu lebih adil untuk semua jika saya menghindari mengubah aturan setelah memposting.












dodecahedron) Tidak diizinkan. Beberapa bahasa memiliki fasilitas untuk membangun model 3D dengan perintah sepertitriangle[[a,b,c],[p,q,r],[x,y,z]]. Bahasa-bahasa ini umumnya memiliki builtin untuk memutar dan menampilkan model, secara otomatis menjaga agar tidak menampilkan wajah yang tersembunyi, dll. Solusi seperti ini diperbolehkan tetapi tidak akan menarik bonus. Tujuan dari bonus ini adalah untuk memungkinkan bahasa yang tidak memiliki fasilitas ini menjadi kompetitif, dan juga untuk menarik solusi yang lebih menarik.