ดาวกระดาษเป็นเรื่องใหญ่ในครอบครัวของฉันในวันคริสต์มาสดังนั้นฉันจึงคิดว่าอันที่จริงแล้วมันจะเท่ห์
ด้านล่างเป็นภาพของdodecahedron ปกติ (จากhttps://en.wikipedia.org/wiki/Dodecahedronประกอบกับผู้เขียนกล่าวถึงที่นั่น)
กระบวนการstellation (วิกิพีเดีย) เมื่อนำไปใช้กับรูปทรงหลายเหลี่ยมเกี่ยวข้องกับการขยายใบหน้าจนกว่าพวกเขาจะข้ามใบหน้าอื่น ๆ ดังนั้นเริ่มต้นด้วย dodecahedron ปกติเราได้รับรูปร่างดังต่อไปนี้:
Dodecahedron ขนาดเล็ก Stodated, Great Dodecahedron และ Great Stodated Dodecahedron
ภาพจากhttp://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stellations.html
นี่เป็นสามStellations ที่เป็นไปได้ของ dodecahedron (Wolfram) พวกมันก่อให้เกิดความก้าวหน้าตามธรรมชาติจากทรงสิบสองเหลี่ยมไปจนถึงทรงสิบสองเหลี่ยมขนาดเล็กที่มีรูปร่างเหมือนดวงดาวรูปร่างคล้ายดาวขนาดใหญ่และรูปทรงสิบสองรูปที่ยิ่งใหญ่เมื่อเราขยายใบหน้าออกไปไกล
งาน
โปรแกรมหรือฟังก์ชั่นของคุณควรแสดงหรือส่งออกไปยังหนึ่งไฟล์ภาพของรูปทรงหลายเหลี่ยมต่อไปนี้: เฟปกติขนาดเล็ก stellated ออฟเฟนบา, Great เฟหรือยิ่งใหญ่ stellated Dodecahedron
ชุดสีควรเป็นภาพที่สองด้านบน ใบหน้าตรงข้ามทั้งหกคู่แต่ละคู่ต้องเป็นหนึ่งในหกสีแดง, เหลือง, เขียว, ฟ้า, น้ำเงินและม่วงแดง คุณอาจใช้สีเริ่มต้นกับชื่อเหล่านี้ในภาษาของคุณหรือเอกสารประกอบของมันหรือใช้สี FF0000, FFFF00, 00FF00, 00FFFF, 0000FF และ FF00FF (คุณสามารถลดสีเหล่านี้ลงได้โดยลดความเข้มลงเหลือ 75% ถ้าต้องการ เช่นโดยการลดค่า F's เป็น C)
โปรดทราบว่าเรากำหนด "ใบหน้า" ว่าเป็นพื้นที่ทั้งหมดในระนาบเดียวกัน ดังนั้นในภาพด้านบนใบหน้าด้านหน้าจึงเป็นสีเหลือง (และด้านหลังขนานกันก็จะเป็นสีเหลืองด้วย)
พื้นหลังควรเป็นสีดำเทาหรือขาว ขอบอาจถูกละเว้น แต่ควรเป็นสีดำหากวาด
กฎระเบียบ
รูปทรงหลายเหลี่ยมที่แสดงต้องมีความกว้างระหว่าง 500 ถึง 1,000 พิกเซล (ความกว้างถูกกำหนดเป็นระยะทางสูงสุดระหว่างจุดยอดที่แสดงสองจุดใด ๆ )
รูปทรงหลายเหลี่ยมที่แสดงจะต้องอยู่ในการฉายภาพมุมมอง (มุมมองอย่างน้อย 5 ความกว้างจากรูปทรงหลายเหลี่ยม) หรือการฉายภาพแบบออโธกราฟฟิค
รูปทรงหลายเหลี่ยมต้องแสดงได้จากทุกมุม (ไม่สามารถเลือกมุมที่เป็นไปได้ง่ายที่สุดและสร้างรูปร่างแบบ hardcoded 2D) ผู้ใช้สามารถระบุมุมได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
อินพุตของสามมุมที่สอดคล้องกับการหมุนสามครั้งจาก stdin หรือเป็นฟังก์ชันหรือพารามิเตอร์บรรทัดคำสั่ง สิ่งเหล่านี้อาจเป็นมุมออยเลอร์ (โดยที่การหมุนครั้งแรกและครั้งสุดท้ายอยู่ในแกนเดียวกัน) หรือมุม Tait-Bryan (ที่มีการหมุนหนึ่งรอบในแต่ละรอบแกน x, y และ z) https://en.wikipedia.org/ wiki / Euler_angles (พูดง่าย ๆ ทุกสิ่งที่ผ่านไปตราบใดที่การหมุนแต่ละครั้งเกี่ยวกับแกน x, y, หรือ z และการหมุนต่อเนื่องกันเป็นเรื่องเกี่ยวกับแกนตั้งฉาก)
สิ่งอำนวยความสะดวกสำหรับผู้ใช้ในการหมุนรูปทรงหลายเหลี่ยมในขั้นตอนไม่เกิน 10 องศาเกี่ยวกับแกน x และ y และรีเฟรชจอแสดงผลจำนวนครั้งใด ๆ โดยพลการ (สมมติว่าแกน z ตั้งฉากกับหน้าจอ)
รูปทรงหลายเหลี่ยมจะต้องมั่นคงไม่ใช่โครงลวด
ไม่อนุญาตให้สร้างบิวอินสำหรับวาดรูปทรงหลายเหลี่ยม (ฉันกำลังดูคุณ Mathematica!)
เกณฑ์การให้คะแนน
นี่คือ codegolf รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
โบนัส
ทวีคูณคะแนนของคุณ 0.5 ถ้าคุณไม่ได้ใช้ builtins สำหรับการวาดภาพ 3 มิติ
ทวีคูณคะแนนของคุณ 0.7 หากคุณสามารถแสดงทั้งสาม stellations ของ dodecahedron เลือกได้โดยผู้ใช้โดยจำนวนเต็ม 1-3 ที่ป้อนจาก stdin หรือตามฟังก์ชั่นหรือพารามิเตอร์ commandline
ถ้าคุณไปโบนัสทั้งสองคะแนนของคุณจะถูกคูณด้วย 0.5 * 0.7 = 0.35
ข้อมูลที่เป็นประโยชน์ (แหล่งที่มาดังต่อไปนี้)
https://en.wikipedia.org/wiki/Regular_dodecahedron
https://en.wikipedia.org/wiki/Regular_icosahedron
dodecahedron มี 20 จุดยอด 8 ของพวกเขาในรูปแบบจุดยอดของก้อนกับพิกัดคาร์ทีเซียน (x, y, z) ดังต่อไปนี้:
(± 1, ± 1, ± 1)
ส่วนที่เหลืออีก 12 มีดังนี้ (พีคืออัตราส่วนทองคำ)
(0, ± 1 / φ, ±φ)
(± 1 / φ, ±φ, 0)
(±φ, 0, ± 1 / φ)
ลำเรือนูนของเดกคาเฮดตรอนขนาดเล็กและเดกคาเฮดตรอนขนาดใหญ่นั้นเห็นได้ชัดว่าเป็นทรงสิบสองเหลี่ยมปกติ จุดยอดนอกอธิบายถึงรูปทรงครึ่งวงกลม
ตามที่วิกิพีเดียมี 12 จุดยอดของ icosahedron สามารถอธิบายได้ในลักษณะเดียวกันกับพีชคณิตพีชคณิต (0, ± 1, ±φ) จุดยอดด้านนอกของ dodecaheron ขนาดเล็กและ dodechahedron ยอดเยี่ยม (ในระดับเดียวกับ dodecahedron ด้านบน) ก่อตัวเป็น icosahedron ที่มีขนาดใหญ่ขึ้นซึ่งพิกัดของจุดยอดนั้นเป็นวงจรเรียงสับเปลี่ยนของ
มุมระหว่างใบหน้าสำหรับ dodecahedron และ icosahedron คือ 2 arctan (phi) และ arccos (- ((5) / 3) ตามลำดับ
สำหรับเคล็ดลับเกี่ยวกับการหมุนดูที่https://en.wikipedia.org/wiki/Rotation_matrix
แก้ไข: โดยไม่ได้ตั้งใจฉันอนุญาตโดเดกคาเฮดรอนประจำและไม่สามารถถอนได้ในตอนนี้ โบนัส x0.7 สำหรับการวาดรูปทรงโพลีเฮดราทั้งสามตัวยังคงอยู่ ในวันปีใหม่ฉันจะออก 100 รางวัลสำหรับคำตอบที่สามารถแสดงรูปทรงโพลีสี่ส่วนใหญ่โดยใช้รหัสที่สั้นที่สุดเป็นตัวแบ่งไทม์
Polyhedrondata
ไม่อนุญาตเนื่องจากเห็นได้ชัดว่าเป็น builtin สำหรับวาดรูปทรงหลายเหลี่ยม หากคำตอบของคุณไม่ได้ใช้ builtins สำหรับการวาดรูปหลายเหลี่ยมและสอดคล้องกับกฎอื่น ๆ ก็เป็นที่ยอมรับ ประเด็นของคุณน่าจะเป็นเพราะความจริงที่ว่าคุณต้องปรับสีใบหน้าให้ถูกต้องPolyhedrondata
จะไม่ช่วยคุณได้มากนักดังนั้นในทางปฏิบัติมันอาจเป็นข้อ จำกัด โดยพลการ ฉันยอมรับในขอบเขต แต่มันก็ยุติธรรมสำหรับทุกคนถ้าฉันหลีกเลี่ยงการเปลี่ยนแปลงกฎหลังจากโพสต์
dodecahedron
) จะไม่ได้รับอนุญาต บางภาษามีสิ่งอำนวยความสะดวกสำหรับการสร้างแบบจำลอง 3triangle[[a,b,c],[p,q,r],[x,y,z]]
มิติที่มีคำสั่งเช่น ภาษาเหล่านี้โดยทั่วไปมี builtins สำหรับการหมุนและการแสดงแบบจำลองการดูแลโดยอัตโนมัติไม่แสดงใบหน้าที่ซ่อนอยู่ ฯลฯ โซลูชั่นเช่นนี้ได้รับอนุญาต แต่จะไม่ดึงดูดโบนัส จุดประสงค์ของโบนัสคืออนุญาตให้ภาษาที่ไม่มีสิ่งอำนวยความสะดวกเหล่านี้สามารถแข่งขันได้และยังสามารถดึงดูดโซลูชันที่น่าสนใจมากขึ้น