Kağıt yıldızları Noel'de ailemde büyük bir şey, bu yüzden sanal bir serin olacağını düşündüm.
Aşağıda düzenli bir dodecahedron görüntüsü ( https://en.wikipedia.org/wiki/Dodecahedron'dan , burada adı geçen yazara atfedilen)
İşlem stellation çok yüzeyli uygulanmış (wikipedia) diğer yüzü geçene kadar yüzleri uzanan içerir. Böylece düzenli dodecahedron ile başlayarak, aşağıdaki şekilleri elde ederiz:
Küçük Stellated Dodecahedron, Büyük Dodecahedron ve Great Stellated Dodecahedron
Http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.html adresinden resim
Bunlar dodekahedronun üç olası Stellasyonudur (Wolfram). Yüzleri daha da ileriye doğru genişlettikçe, dodekahedrondan küçük yıldızlanmış dodekahedrona, büyük dodekahedron ve büyük yıldızlanmış dodekahedrona doğal bir ilerleme sağlarlar.
Görev
Programınız veya işleviniz aşağıdaki polihedradan birini bir görüntü dosyasına göstermeli veya çıktı vermelidir: Düzenli dodekahedron, Küçük yıldızlı dodekahedron, Büyük dodekahedron veya Büyük Stellated Dodecahedron .
Renk şeması yukarıdaki ikinci resim gibi olmalıdır. Altı çift karşılıklı yüzün her biri altı renkten biri olan Kırmızı, Sarı, Yeşil, Camgöbeği, Mavi ve Macenta renklerinden biri olacaktır. Bu adları kendi dilinizde veya belgelerinde varsayılan renkler veya FF0000, FFFF00, 00FF00, 00FFFF, 0000FF ve FF00FF renklerini kullanabilirsiniz (istenirse yoğunluğu en az% 75'e kadar azaltarak, örneğin F'leri C'lere indirgeyerek.)
Bir "yüzü" aynı düzlemdeki tüm alanlar olarak tanımladığımızı unutmayın. Böylece, ön yüzün üstündeki görüntülerde sarıdır (ve paralel arka yüz de sarı olacaktır.)
Arka plan siyah, gri veya beyaz olmalıdır. Kenarlar atlanabilir, ancak çizilirse siyah olmalıdır.
kurallar
Görüntülenen çokyüzlünün genişliği 500 ile 1000 piksel arasında olmalıdır (genişlik, görüntülenen iki köşe arasındaki maksimum mesafe olarak tanımlanır.)
Görüntülenen çokyüzlünün perspektif projeksiyonu (polihedrondan en az 5 genişlikte bakış açısı) veya ortografik projeksiyon (sonsuza kadar bakış açısı ile etkili bir perspektif projeksiyonu) olması gerekir.
Çokyüzlünün her açıdan görüntülenebilir olması gerekir. (Mümkün olan en kolay açıyı seçmek ve sabit kodlu bir 2D şekil oluşturmak kabul edilemez.) Açı, kullanıcı tarafından aşağıdaki yollardan biriyle belirtilebilir:
Stdin'den veya fonksiyon veya komut satırı parametreleri olarak üç dönüşe karşılık gelen üç açının girilmesi. Bunlar ya Euler açıları (ilk ve son rotasyonların aynı eksende olduğu yerlerde) veya Tait-Bryan açıları (x, y ve z ekseni etrafında her biri bir dönüş olduğunda) https://en.wikipedia.org/ wiki / Euler_angles (basitçe söylemek gerekirse, her dönüş x, y veya z ekseni ve ardışık dönüşler yaklaşık dikey eksenler olduğu sürece her şey devam eder.)
Kullanıcının çokyüzlüyü x ve y eksenleri hakkında 10 dereceden fazla olmayan adımlarla döndürme ve ekranı, herhangi bir keyfi sayıda (z ekseninin ekrana dik olduğu varsayılarak) yenileme olanağı.
Çokyüzlünün tel çerçeve değil katı olması gerekir.
Polihedra çizmek için hiçbir yapıya izin verilmez (Sana bakıyorum Mathematica!)
puanlama
Bu kodgolf. Bayt cinsinden en kısa kod kazanır.
Bonuslar
3D çizim için builtins kullanmıyorsanız puanınızı 0,5 ile çarpın.
Kullanıcı tarafından stdin'den girilen 1-3 tamsayısı veya işlev veya komut satırı parametresi ile seçilebilen dodecahedron yıldızlarının üçünü de görüntüleyebiliyorsanız puanınızı 0,7 ile çarpın.
Her iki bonus için de giderseniz puanınız 0.5 * 0.7 = 0.35 ile çarpılacaktır.
Faydalı bilgiler (aşağıdaki kaynaklar)
https://en.wikipedia.org/wiki/Regular_dodecahedron
https://en.wikipedia.org/wiki/Regular_icosahedron
Dodecahedronun 20 köşesi vardır. Bunlardan 8'i, aşağıdaki kartezyen (x, y, z) koordinatlarına sahip bir küpün köşelerini oluşturur:
(± 1, ± 1, ± 1)
Kalan 12 aşağıdaki gibidir (phi altın orandır)
(0, ± 1 / φ, ± φ)
(± 1 / φ, ± φ, 0)
(± φ, 0, ± 1 / φ)
Küçük yıldız şeklinde dodecahedron ve büyük dodecahedronun dışbükey gövdesi açıkçası düzenli bir dodecahedron. Dış köşeler bir ikosahedronu tanımlar.
Wikipedia'ya göre bir ikosahedronun 12 köşesi, (0, ± 1, ± φ) döngüsel permütasyonlarına benzer bir şekilde tarif edilebilir. Küçük yıldızlanmış dodecaheron ve büyük dodechahedron'un dış köşeleri (yukarıdaki dodecahedron ile aynı ölçekte), daha büyük bir ikosahedron oluşturur, burada köşelerin koordinatları (0, ± φ ^ 2, ± φ) döngüsel permütasyonlarıdır.
Dodecahedron ve icosahedron için yüzler arasındaki açılar sırasıyla 2 arctan (phi) ve arccos'tur (- (√5) / 3).
Döndürmeyle ilgili ipuçları için bkz. Https://en.wikipedia.org/wiki/Rotation_matrix
EDIT: Yanlışlıkla düzenli dodecahedron izin verdim ve şimdi geri çekemiyorum. Üç yıldızlı polihedra kalıntısının hepsini çizmek için x0.7 bonusu. Yılbaşı gününde, dört mohedranın çoğunu gösterebilen cevap için, kravat kopuşu olarak en kısa kodla 100 lütuf ödeyeceğim.
Polyhedrondata
açıkça çok yüzlü çizim için bir yapı olduğu için izin verilmiyor. Cevabınız polihedra çizmek için yerleşikleri kullanmıyorsa ve diğer kurallara uyuyorsa, kabul edilebilir. Amacınız, yüzleri doğru bir şekilde renklendirmeniz gerektiğinde, Polyhedrondata
sizi çok fazla kurtaramayacağı gerçeği göz önüne alındığında, pratikte biraz keyfi bir kısıtlama olabilir. Bir dereceye kadar katılıyorum, ancak gönderdikten sonra kuralları değiştirmekten kaçınmam daha adil.
dodecahedron
) çizmek için kullanılan LegionMammal978 yapılarına izin verilmiyor. Bazı dillerde 3 boyutlu modeller oluşturmak için komutlar gibi olanaklar bulunurtriangle[[a,b,c],[p,q,r],[x,y,z]]
. Bu diller genellikle modeli döndürmek ve görüntülemek, otomatik olarak gizli yüzleri göstermemek vb. Bonusun amacı, bu olanaklara sahip olmayan dillerin rekabetçi olmasını sağlamak ve ayrıca daha ilginç çözümler çekmek.