ฉันเห็นรูปโค้งมังกรคู่แฝดที่ทำจากสี่เหลี่ยมและสงสัยว่าจะเกิดอะไรขึ้นถ้าเราเริ่มจากภาพฐานอีกภาพ ดังนั้นฉันจึงเขียนโปรแกรมเพื่อทำสิ่งนี้
มันเจ๋งมากที่ฉันคิดว่ามันจะสนุกที่จะทำมันเป็นความท้าทาย
งาน
คุณจะถ่ายภาพสี่เหลี่ยมจัตุรัสที่มีความยาวขอบซึ่งเท่ากับกำลัง 2 (มากกว่า 4)
ในการทำให้ภาพนี้คุณควรเริ่มต้นด้วยการแบ่งภาพของคุณออกเป็นวงแนวตั้ง 4 วงที่มีขนาดเท่ากันและเลื่อนแถบที่อยู่ติดกันหนึ่งใน 8 ของขนาดของภาพในทิศทางตรงกันข้าม (วงที่เลื่อน จากนั้นคุณควรทำขั้นตอนนี้ซ้ำทุกครั้งที่แบ่งภาพออกเป็นสองเท่าของหลาย ๆ แผนกและเลื่อนครึ่งเท่าของเวลาก่อนหน้า การวนซ้ำแต่ละครั้งคุณควรสลับระหว่างการเลื่อนแนวตั้งและแนวนอน คุณควรวนซ้ำจนกว่าการเลื่อนจะทำให้คุณต้องเลื่อนตามจำนวนพิกเซลแบบเศษส่วน (ซึ่งจะเป็น 1/2 เสมอ) ณ จุดที่คุณทำ
เมื่อเลื่อนแถบเลขคี่แนวตั้งจากซ้าย (ดัชนีเป็นศูนย์) ควรเลื่อนลงในขณะที่เลื่อนขึ้น เมื่อเลื่อนแถบเลขคี่แนวนอนจากด้านบนควรเลื่อนไปทางซ้ายในขณะที่เลขที่มีวงก็ควรเลื่อนไปทางขวา
คุณต้องการเพียงผลลัพธ์ / แสดงผลลัพธ์สุดท้ายของการแปลงไม่ใช่ขั้นตอนกลางทั้งหมดเช่นใน gif
นี่คือโค้ดกอล์ฟดังนั้นเป้าหมายคือเพื่อลดความยาวของซอร์สโค้ดของคุณตามที่วัดเป็นไบต์
ทำงานผ่านตัวอย่าง
ฉันจะทำงานผ่าน cat gif ที่แสดงที่ด้านบนของเฟรมหน้าทีละเฟรม
นี่คือภาพเริ่มต้น:
ภาพนี้คือ 512 คูณ 512 พิกเซล เราจะแบ่งออกเป็น 4 แบนด์เพื่อเริ่มและเลื่อนแต่ละแบนด์โดย 1/8 ขนาดภาพ (64 พิกเซล) ในแนวตั้ง
ตอนนี้เราจะแบ่งออกเป็นสองเท่าของวงดนตรี (8 แบนด์) และเลื่อนครึ่งเท่าที่ผ่านมา (32 พิกเซล) คราวนี้เราจะเลื่อนในแนวนอน
ตอนนี้เราจะเลื่อนในแนวตั้งอีกครั้งคราวนี้แยกเป็น 16 แบนด์และเลื่อนแต่ละแบนด์เป็น 16 พิกเซล
32 วง, 8 พิกเซล, กะแนวนอน
64 แถบ, 4 พิกเซล, การเลื่อนในแนวตั้ง
128 แถบ, 2 พิกเซล, การเลื่อนในแนวนอน
256 แถบ, 1 พิกเซล, การเลื่อนในแนวตั้ง
เนื่องจากการเลื่อนครั้งต่อไปจะทำให้เราต้องเลื่อนแต่ละวงไปครึ่งพิกเซลเราจะหยุดที่จุดนี้และให้ผลลัพธ์ออกมา
กรณีทดสอบ
ฉันมีสคริปต์การทำงานที่สามารถสร้างภาพเหล่านี้ดังนั้นฉันคิดว่าฉันจะให้พวกคุณเลือกภาพสำหรับกรณีทดสอบ ดังนั้นหากคุณมีรูปสี่เหลี่ยมจัตุรัสซึ่งมีความกว้าง 2 เท่าที่คุณอยากเห็นกลายเป็นมังกร อย่าลังเลที่จะส่งมาให้ฉันและฉันจะทำให้เป็นกรณีทดสอบ
คุณควรทดสอบกับภาพสีขาวหรือสีดำล้วนเพื่อให้คุณสามารถระบุได้ว่าพิกเซลหายไปหรือไม่
**Start** by shifting one 8th of the size of the image
แล้วrepeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
จึงเป็นครั้งแรกที่จะได้รับ 1/8, 1/16 ที่สอง ที่ 1/32 ที่สามจนกระทั่งจำนวนพิกเซลเป็นเศษส่วน ฉันไม่เห็นสิ่งที่ไม่ชัดเจนเกี่ยวกับเรื่องนี้