크리스마스에는 가족에게 종이 별이 큰 것이기 때문에 가상의 별이 시원 할 것이라고 생각했습니다.
아래는 정기 십이 면체 의 이미지입니다 ( https://en.wikipedia.org/wiki/Dodecahedron ).
다면체에 적용될 때 별자리 과정 (wikipedia)은 다른면과 교차 할 때까지면을 연장하는 것을 포함합니다. 따라서 정 십이 면체로 시작하여 다음과 같은 모양을 얻습니다.
작은 별 십이 면체, 큰 십이 면체 및 큰 별 십이 면체
http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.html의 이미지
이들은 십이 면체 (Wolfram) 의 세 가지 가능한 설명입니다 . 그들은 우리가 얼굴을 더 그리고 더 확장함에 따라 십이 면체에서 작은 별 모양 십이 면체, 큰 십이 면체 및 큰 별 모양 십이 면체로 자연스럽게 진행된다.
직무
프로그램 또는 함수는 일반 다면체 , 작은 별 모양 십이 면체, 큰 십이 면체 또는 위대한 성 십이 면체 중 하나의 이미지 파일로 표시하거나 출력해야합니다 .
색 구성표는 위의 두 번째 이미지와 같아야합니다. 6 쌍의 반대면은 각각 빨강, 노랑, 녹색, 청록, 파랑, 마젠타의 6 가지 색상 중 하나입니다. 언어 또는 설명서에 이러한 이름의 기본 색상을 사용하거나 FF0000, FFFF00, 00FF00, 00FFFF, 0000FF 및 FF00FF 색상을 사용할 수 있습니다 (원하는 경우 강도를 최소 75 %로 줄여 톤을 낮출 수 있음, 예를 들어 F를 C로 줄임으로써)
"평면"을 동일한 평면의 모든 영역으로 정의합니다. 따라서 앞면 위의 이미지는 노란색입니다 (평행 한 뒷면도 노란색입니다).
배경은 검은 색, 회색 또는 흰색이어야합니다. 가장자리는 생략 할 수 있지만 그려진 경우 검은 색이어야합니다.
규칙
표시된 다면체의 너비는 500-1000 픽셀이어야합니다 (너비는 표시된 두 정점 사이의 최대 거리로 정의 됨).
표시된 다면체는 투시 투영 (다면체로부터 5 폭 이상 떨어진 시점) 또는 직교 투영 (유효한 시점을 가진 투시 투영)에 있어야합니다.
다면체는 어느 각도에서나 표시 할 수 있어야합니다. (가장 쉬운 각도를 선택하고 하드 코딩 된 2D 모양을 만드는 것은 허용되지 않습니다.) 각도는 다음 방법 중 하나로 사용자가 지정할 수 있습니다.
stdin에서 또는 함수 또는 명령 줄 매개 변수로 3 개의 회전에 해당하는 3 개의 각도 입력 오일러 각도 (첫 번째 회전과 마지막 회전이 같은 축을 중심으로하는 위치) 또는 Tait-Bryan 각도 (각각 x, y 및 z 축을 중심으로 한 회전이있는 위치) https://en.wikipedia.org/ wiki / Euler_angles (간단히 말하면, 각 회전이 x, y 또는 z 축에 대해 있고 연속 회전이 수직 축에 관한 한 모든 것이 진행됩니다.)
사용자가 x 축과 y 축을 중심으로 다면체를 10도 이상 회전하지 않고 임의의 횟수로 화면을 새로 고치는 기능 (화면에 수직 인 z 축을 가정).
다면체는 와이어 프레임이 아닌 단단해야합니다.
다면체 그리기를위한 내장은 허용되지 않습니다 (Mathematica를보고 있습니다).
채점
이것은 codegolf입니다. 바이트 단위의 최단 코드가 이깁니다.
보너스
3D 드로잉에 내장을 사용하지 않는 경우 점수에 0.5를 곱하십시오.
십이 면체의 별자리 3 개를 모두 표시 할 수 있으면 stdin에서 입력 한 정수 1-3 또는 함수 또는 명령 줄 매개 변수로 사용자가 선택할 수있는 경우 점수에 0.7을 곱하십시오.
두 보너스를 모두 받으면 점수에 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 개는 다음과 같습니다 (phi는 황금 비율 임).
(0, ± 1 / φ, ± φ)
(± 1 / φ, ± φ, 0)
(± φ, 0, ± 1 / φ)
작은 별 모양 십이 면체와 큰 십이 면체의 볼록 껍질은 분명히 규칙적인 십이 면체입니다. 바깥 쪽 정점은 정 이십 면체를 나타냅니다.
Wikipedia에 따르면 정 이십 면체의 12 정점은 (0, ± 1, ± φ)의 순환 순열과 유사한 방식으로 설명 될 수 있습니다. 작은 별 모양 십이 면체와 큰 십이 면체 (위의 십이 면체와 같은 규모)의 외부 정점은 더 큰 정 이십 면체를 형성하며, 정점의 좌표는 (0, ± φ ^ 2, ± φ)의 순환 순열입니다.
정 십이 면체와 정 이십 면체의면 사이의 각도는 각각 2 arctan (phi) 및 arccos (-(√5) / 3)입니다.
회전에 대한 팁은 https://en.wikipedia.org/wiki/Rotation_matrix를 참조 하십시오.
편집 : 실수로 일반 정 십이 면체를 허용했으며 지금 철회 할 수 없습니다. 별 모양의 다면체를 모두 그리는 데 사용되는 x0.7 보너스가 남아 있습니다. 새해 첫날에는 네 개의 다면체를 최대한 표시하고 가장 짧은 코드를 타이 브레이크로 표시 할 수있는 현상금 100을 지급합니다.
Polyhedrondata
다면체 그리기를위한 내장 기능이 명확하지 않으므로 허용되지 않습니다. 답이 다면체를 그리기 위해 내장을 사용하지 않고 다른 규칙을 준수하는 경우 허용됩니다. 당신의 요점은 얼굴을 올바르게 채색해야한다는 사실을 감안할 때 Polyhedrondata
어쨌든 많이 절약하지 못하기 때문에 실제로 다소 임의의 제한이있을 수 있습니다. 어느 정도 동의하지만 게시 후 규칙을 변경하지 않으면 모든 것이 더 공정합니다.
dodecahedron
은 허용되지 않습니다. 일부 언어에는와 같은 명령으로 3D 모델을 구축 할 수있는 기능이 있습니다triangle[[a,b,c],[p,q,r],[x,y,z]]
. 이러한 언어에는 일반적으로 모델 회전 및 표시를위한 내장 기능이 있으며 숨겨진 얼굴 등을 자동으로 표시하지 않습니다. 이러한 언어와 같은 솔루션은 허용되지만 보너스를받지는 않습니다. 보너스의 목적은 이러한 시설이없는 언어의 경쟁력을 높이고보다 흥미로운 해결책을 찾는 것입니다.