拡大縮小(4)

昨日は3$dx倍した3$sxを元に戻すために除算を使っていたのだけれど、そんなのは必要ない。
例えば、3$dw3$13で、3$sw3$9だった場合、3$sxの位置は、毎ループ3$\frac{9}{13}だけ進む。これのスケールを3$13倍すると、毎ループ3$9づつ進むことになるのだ。
で、それが3$13を超えた場合のみ、3$sx3$1だけ加算すれば良いということになる。

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 だけ減る
    }
}

これで、最初のプログラムと同じソースが出来た。
ただ、最初にも書いたけど、これだと縮小するときにうまくいかない。