紙の星は私の家族のクリスマスの大物なので、私は仮想の星がクールだと思いました。
以下は、正十二面体の画像です(https://en.wikipedia.org/wiki/Dodecahedronから、そこで言及された作者に帰属します)。
星座のプロセス(ウィキペディア)を多面体に適用すると、他の面と交差するまで面が拡張されます。したがって、通常の12面体から始めて、次の形状を取得します。
小さな十二面体、大きな十二面体、そして大きな十二面体
http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.htmlからの画像
これらは、十二面体(ウルフラム)の3つの可能な星座です。それらは、12面体から小さな12面体、大きな12面体、そして大きな12面体へと自然に進行します。
仕事
プログラムまたは関数は、次の多面体の1つである画像ファイルを表示または出力する必要があります。正十二面体、小さい星形十二面体、大きい十二面体または大きい星形十二面体。
配色は上の2番目の画像のようになります。6対の向かい合う面のそれぞれは、赤、黄、緑、シアン、青、マゼンタの6色のいずれかになります。言語またはそのドキュメントでこれらの名前のデフォルトの色を使用するか、FF0000、FFFF00、00FF00、00FFFF、0000FF、FF00FFの色を使用できます(必要に応じて、強度を最低75%に下げることで、これらのトーンを下げることができます。たとえば、FをCに減らすなど)。
「面」を同じ平面内のすべての領域として定義することに注意してください。したがって、上の画像の前面は黄色です(平行な背面も黄色になります)。
背景は黒、灰色、または白でなければなりません。エッジは省略できますが、描画する場合は黒にする必要があります。
ルール
表示される多面体の幅は500〜1000ピクセルである必要があります(幅は、表示される2つの頂点間の最大距離として定義されます)。
表示される多面体は、透視投影(多面体から少なくとも5幅離れた視点)、または正射影(事実上、視点が無限遠にある透視投影)でなければなりません。
多面体はどの角度からでも表示できる必要があります。(可能な限り簡単な角度を選択してハードコードされた2D形状を作成することはできません。)角度は、次のいずれかの方法でユーザーが指定できます。
stdinから、または関数またはコマンドラインパラメータとして、3つの回転に対応する3つの角度の入力。これらは、オイラー角(最初と最後の回転が同じ軸を中心とする)またはテイトブライアン角(x、y、z軸を中心に1回転)のいずれかになります。https://en.wikipedia.org/ wiki / Euler_angles(簡単に言えば、各回転がx、y、またはz軸を中心とし、連続した回転が垂直軸を中心とするものであれば何でもかまいません。)
ユーザーが多面体をx軸とy軸を中心に10度以下のステップで回転させ、任意の回数だけ画面を更新するための機能(画面に垂直なz軸を想定)。
多面体はワイヤーフレームではなく、ソリッドでなければなりません。
多面体を描画するための組み込み関数は許可されていません(Mathematicaであなたを探しています!)
得点
これはコードゴルフです。バイト単位の最短コードが優先されます。
ボーナス
3D描画にビルトインを使用しない場合は、スコアに0.5を掛けます。
12面体の星座を3つすべて表示できる場合は、スコアに0.7を掛けます。これは、ユーザーがstdinから入力した1〜3の整数で選択するか、関数またはコマンドラインパラメーターで選択できます。
両方のボーナスを獲得すると、スコアに0.5 * 0.7 = 0.35が掛けられます。
役立つ情報(以下のソース)
https://en.wikipedia.org/wiki/Regular_dodecahedron
https://en.wikipedia.org/wiki/Regular_icosahedron
十二面体には20個の頂点があります。それらのうちの8つは、次のデカルト(x、y、z)座標を持つ立方体の頂点を形成します。
(±1、±1、±1)
残りの12は次のとおりです(ファイは黄金比です)
(0、±1 /φ、±φ)
(±1 /φ、±φ、0)
(±φ、0、±1 /φ)
小さい星形の十二面体と大きい十二面体の凸包は明らかに正十二面体です。外側の頂点は二十面体を表します。
ウィキペディアによると、正二十面体の12個の頂点は、(0、±1、±φ)の巡回置換と同じように記述できます。小さな星形の十二面体と大きい十二面体(上記の十二面体と同じスケール)の外側の頂点は、より大きな二十面体を形成し、頂点の座標は(0、±φ^ 2、±φ)の巡回置換です。
12面体と20面体の面間の角度は、それぞれ2 arctan(phi)とarccos(-(√5)/ 3)です。
回転のヒントについては、https://en.wikipedia.org/wiki/Rotation_matrixを参照してください
編集:誤って、正十二面体を許可しましたが、今は後退できません。星状多面体の3つすべてを描画するためのx0.7ボーナスは残っています。元日には、4つの多面体のほとんどを表示できる回答に対して100の賞金を発行します。タイブレイクとして最短のコードを使用します。
Polyhedrondata
多面体を描画するための組み込み関数であることは明らかであるため、許可されていません。あなたの答えが多面体の描画にビルトインを使用せず、他のルールに準拠している場合、それは許容されます。あなたのポイントは、あなたが顔を正しく着色しなければならないという事実を与えられたとしてPolyhedrondata
も、とにかくあなたをそれほど救わないだろうということであるように思われます。ある程度は同意しますが、投稿後にルールを変更しないようにした方が公平です。
dodecahedron
は許可されていません。一部の言語には、などのコマンドを使用して3Dモデルを作成する機能がありますtriangle[[a,b,c],[p,q,r],[x,y,z]]
。これらの言語には通常、モデルを回転して表示する組み込み機能があり、自動的に隠された顔が表示されないようにします。これらのようなソリューションは許可されていますが、ボーナスを引き付けません。ボーナスの目的は、これらの機能を持たない言語が競争力を持つことを可能にし、さらに興味深いソリューションを引き付けることです。