เอพิไซคลอยด์เป็นเส้นโค้งจุดบนวงกลมทำให้เป็นมันม้วนรอบวงกลมอีก cyclogonเป็นรูปร่างจุดบนเป็นรูปเหลี่ยมปกติทำให้เป็นมันม้วนทั่วเครื่องบิน epicyclogonเป็นเส้นโค้งตรวจสอบโดยจุดบนเหลี่ยมปกติหนึ่งขณะที่มันม้วนรอบอีก
เขียนโปรแกรมที่ดึง epicyclogon ที่กำหนดr
, r1
, r2
, n1
, n2
:
r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values)
r1 = distance from center of stationary polygon to each of its vertices (positive real number)
r2 = distance from center of rolling polygon to each of its vertices (positive real number)
n1 = number of sides stationary polygon has (integer greater than 2)
n2 = number of sides rolling polygon has (integer greater than 2)
หมายเหตุ
- เมื่อ
r
เป็นลบลูกกลิ้งควรจะไปทวนเข็มนาฬิกา - สำหรับ
r
การปฏิวัติหนึ่งครั้งเกิดขึ้นเมื่อเส้นที่เชื่อมต่อเซนทรอยด์ของทั้งสองรูปร่างกวาดล้างเต็ม 360 องศาr
ความคิดนี้จะขยายไปถึงค่าทั้งหมดของ (ดังนั้นในหนึ่งไตรมาสการปฏิวัติเส้นเชื่อมต่อเซนทรอยด์สามารถกวาดล้าง 90 องศา) - ข้อโต้แย้งเหล่านี้ควรมาจากบรรทัดคำสั่งหรือโปรแกรมของคุณควรแจ้งให้พวกเขาทราบ (เช่นกับ Python
input()
) r1
และr2
สัมพันธ์กันไม่ใช่ขนาดของภาพ ดังนั้นคุณสามารถตั้งค่า "หน่วย" หนึ่งหน่วยเป็นจำนวนพิกเซลที่แท้จริง
จุดที่คุณต้องติดตามคือหนึ่งในจุดยอดของรูปร่างที่กลิ้ง รูปร่างต้องเริ่มต้นด้วยจุดสุดยอดนี้โดยการสัมผัสจุดยอดที่อยู่กับที่และด้านที่อยู่ติดกัน:
จุดเริ่มต้นที่แน่นอนและมุมของรูปหลายเหลี่ยมแบบคงที่ไม่สำคัญ
เอาท์พุต
ผลลัพธ์ควรไปที่รูปภาพที่มีขนาดอย่างน้อย 600x600 พิกเซล (หรือบางส่วนของตัวแปรที่สามารถตั้งค่าได้มากกว่า 600) จะต้องแสดงเส้นโค้ง epicyclogon ทั้งหมดที่ระบุโดยพารามิเตอร์กรอบในภาพ
รูปวาดรูปหลายเหลี่ยมแบบกลิ้งและแบบอยู่กับที่จะต้องถูกดึง (ด้วยลูกกลิ้งในสถานะสุดท้าย) สองรูปร่างและ epicyclogon ควรเป็นสามสีที่แตกต่างกันอย่างเห็นได้ชัด
จะต้องมีวิธีที่ง่ายในการไม่วาดรูปหลายเหลี่ยม (การเปลี่ยนแปลงtrue
เป็นfalse
ในพอเพียงของรหัส)
โปรดแสดงรูปภาพที่ส่งออกอย่างน้อย 2 รูป มันก็โอเคที่จะหดมันถ้าจำเป็น
เกณฑ์การให้คะแนน
รหัสที่สั้นที่สุดที่สร้างภาพออกที่ถูกต้องชนะ
โบนัส
- ลบ 50 ไบต์หากเอาต์พุตเป็นภาพเคลื่อนไหว gif (หรือคล้ายกัน) ของเส้นโค้งที่วาด
- ลบ 150 ไบต์หากคุณปล่อย
n1
และn2
รับค่า 2 เพื่อให้รูปร่างกลายเป็นส่วนของเส้นความยาว2 * r1
(หรือr2
), "กลิ้ง" ซึ่งกันและกัน วิธีจัดการกับr
เวลาn1
และn2
2 ขึ้นอยู่กับคุณเนื่องจากเซนทรอยด์ไม่ได้หมุนรอบกันและกันเหมือนอย่างที่พวกเขาทำในกรณีอื่น ๆ (ไม่ใช่ "การกลิ้ง" เลยจะไม่ถือว่าเป็นการจัดการ)
เนื่องจากฉันค่อนข้างกระตือรือร้นที่จะเห็นความคิดนวนิยายเรื่องนี้ดำเนินไปด้วยดี (และไม่ได้เป็นเหมือน cakewalk) ฉันจะได้รับรางวัล 150 ค่าตอบแทนผู้ชนะ การประกวดจะสิ้นสุดในวันเดียวกันกับที่เงินรางวัลหมด
เงินรางวัลจะไม่ถูกมอบให้กับผู้ชนะหากมีความชัดเจนว่าพวกเขาเพียงแค่เขียนรหัสส่วนใหญ่จากการส่งอีกครั้ง
ฟังก์ชั่นห้องสมุดที่เกิดขึ้นแล้วในการทำเช่นนี้ (ถ้ามี) ไม่ได้รับอนุญาต
หมายเหตุ: นี่มาจากคำถามที่เหลือของฉันที่ทุกคนสามารถโพสต์ได้ฟรี แต่ถ้าไม่มีใครโพสต์พวกเขามีโอกาสที่ดีที่ฉันจะทันเวลา : P