正方形から作られた双竜の曲線のクールなGIFを見て、別のベース画像から始めたらどうなるのだろうと思った。そこで、これを行うプログラムを作成しました。
とてもクールなので、チャレンジとしてそれをするのは楽しいと思いました。
仕事
エッジの長さが2の累乗(4より大きい)の正方形の画像を取り込みます。
この画像を作成するには、画像を同じサイズの4つの垂直バンドに分割し、隣接するバンドを画像のサイズの1/8の反対方向にシフトすることから始めます(シフトしたバンドは反対側に回り込む必要があります)。その後、イメージを2倍の分割に分割し、前の半分までシフトするたびに、このプロセスを繰り返す必要があります。各反復では、垂直シフトと水平シフトを交互に行う必要があります。シフトを行うには、ピクセルの端数(これは常に1/2になる)だけシフトする必要があるまで、その時点で繰り返す必要があります。
垂直に奇数のバンドを左からシフトする場合(インデックスがゼロ)、下にシフトし、偶数にシフトします。水平方向に奇数のバンドを上からシフトする場合は、左にシフトし、偶数のバンドを右にシフトする必要があります。
変換の最終結果を出力/表示するだけでよく、gifのようなすべての中間ステップではありません。
これはコードゴルフなので、目標は、ソースコードの長さをバイト単位で最小化することです。
例を通して働いた
ページの上部に表示される猫のgifをフレームごとに処理します。
これが開始イメージです。
この画像は512 x 512ピクセルです。4つのバンドに分割して、各バンドを開始し、画像サイズの1/8(64ピクセル)ずつ垂直にシフトします。
これを2倍のバンド(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、2 番目は1/16になります。ピクセル数が小数になるまでの3番目の1/32。これについて何が不明瞭なのかわかりません。