Bir kare yapılmış ikiz ejderha eğrisi serin bir gif gördüm ve başka bir temel görüntüden başlarsak ne olacağını merak ettim. Bu yüzden bunu yapmak için bir program yazdım.
O kadar havalı ki, bunu bir meydan okuma olarak yapmanın eğlenceli olacağını düşündüm.
Görev
Kenar gücü 2 olan (4'ten büyük) kare görüntü alacaksınız.
Bu görüntüyü yapmak için, görüntünüzü eşit boyutta 4 dikey şeride bölerek ve bitişik şeritleri görüntünün boyutunun 8'inin zıt yönlere kaydırmasıyla başlamalısınız (değişen bantlar diğer tarafa sarılmalıdır). Daha sonra görüntüyü iki katına böldüğünüzde her seferinde bu işlemi tekrarlamanız ve önceki zamana göre yarıya kaydırmanız gerekir. Her yineleme dikey ve yatay vardiya arasında geçiş yapmalısınız. Kaydırma, yaptığınız noktada kesirli sayıda piksel (bu daima 1/2 olacaktır) ile kaydırmanızı gerektirinceye kadar yinelemelisiniz.
Dikey olarak kaydırıldığında, tek sayılı bantlar sola (sıfır indeksli) yukarı kaydırılırken aşağı kaydırılmalıdır. Yatay olarak tek sıralı bantlar üstten kaydırılırken, numaralandırılmış bantlar bile sağa kaydırılmalıdır.
Dönüştürme işleminin sonucunu çıktı / görüntülemeye ihtiyacınız var, gif'deki tüm ara adımlar değil.
Bu kod-golf olduğundan amaç, kaynak kodunuzun uzunluğunu bayt olarak ölçtüğünüz en aza indirgemektir.
Örnek yoluyla çalıştı
Sayfa çerçevesinin üstünde gösterilen kedi gifini kare kare olarak çalışacağım.
İşte başlangıç resmi:
Bu görüntü 512 x 512 pikseldir. Her bandın dikey olarak 1/8 boyutunda (64 piksel) başlatılması ve kaydırılması için 4 bantta parçalayacağız.
Şimdi onu iki kat daha fazla gruba (8 bant) ayıracağız ve son zamana kadar (32 piksel) yarıya kaydıracağız. Bu kez yatay olarak kayacağız.
Şimdi bu kez 16 gruba ayrılarak her bir bandı 16 piksel kaydırıp dikey olarak değiştireceğiz.
32 bant, 8 piksel, yatay kaydırma
64 bant, 4 piksel, dikey kaydırma.
128 bant, 2 piksel, yatay kaydırma.
256 bant, 1 piksel, dikey kaydırma.
Bir sonraki vardiya, her bir bandı yarım piksel hareket ettirmemizi gerektirdiğinden, bu noktada duracağız ve sonucu çıkaracağız.
Test durumları
Test görüntüleri için görüntüleri seçmenize izin vereceğimi düşündüğümden, bu görüntüleri oluşturabilecek çalışan bir senaryom var. Öyleyse, 2 genişlikteki kare bir görüntünüz varsa, görmek istediğiniz ejderha haline gelir. Bana göndermek için çekinmeyin ve bir test davası yapacağım.
Ayrıca, düz beyaz veya düz siyah bir görüntü üzerinde test etmelisiniz, böylece piksellerin kaybolup kaybolmadığını belirleyebilirsiniz.
**Start** by shifting one 8th of the size of the image
o repeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
zaman ilk kez 1/8, ikinci 1/16 olacaktır. üçüncü 1/32 piksel sayısı kesirli olana kadar. Bu konuda neyin belirsiz olduğunu anlamıyorum.