ฉันเห็นรูปโค้งมังกรคู่แฝดที่ทำจากสี่เหลี่ยมและสงสัยว่าจะเกิดอะไรขึ้นถ้าเราเริ่มจากภาพฐานอีกภาพ ดังนั้นฉันจึงเขียนโปรแกรมเพื่อทำสิ่งนี้

มันเจ๋งมากที่ฉันคิดว่ามันจะสนุกที่จะทำมันเป็นความท้าทาย
งาน
คุณจะถ่ายภาพสี่เหลี่ยมจัตุรัสที่มีความยาวขอบซึ่งเท่ากับกำลัง 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 ที่สามจนกระทั่งจำนวนพิกเซลเป็นเศษส่วน ฉันไม่เห็นสิ่งที่ไม่ชัดเจนเกี่ยวกับเรื่องนี้




