拡大縮小(5)
なぜ縮小でうまくいかないか考えてみる。
例えばがでがだった場合、は毎ループだけ進む。
1回ループすると、が、がになる。
2回目のループでは、が、がになる。
この時点でおかしい。本来であれば、はを超えた場合、へ値を渡さなければならない。
つまり、2回目のループでは、が、がにならなければならないのだ。
これをそのままプログラムにすると、
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 を加算する while( big_sx >= dw ){ // ここが違う sx++; big_sx -= dw; // sx を1つ増やしたので、こっちは dw だけ減る } }
がより大きい間は、その値をに渡すようにすればいいのだ。
これで縮小もうまくいく。
ただし、while にするのはもったいない。