拡大縮小(4)
昨日は倍したを元に戻すために除算を使っていたのだけれど、そんなのは必要ない。
例えば、がで、がだった場合、の位置は、毎ループだけ進む。これのスケールを倍すると、毎ループづつ進むことになるのだ。
で、それがを超えた場合のみ、をだけ加算すれば良いということになる。
int big_sx = 0; int sx = 0; int dx = 0; while( true ){ if( dx >= dw) break; dst[ dx ] = src[ sx ]; dx++; big_sx += sw; // 毎ループ sw を加算する if( big_sx >= dw ){ sx++; big_sx -= dw; // sx を1つ増やしたので、こっちは dw だけ減る } }
これで、最初のプログラムと同じソースが出来た。
ただ、最初にも書いたけど、これだと縮小するときにうまくいかない。