JAVAの最適化(6)

90度回転アルゴリズムを、もう少し考えてみました。

0 1
2 3
4 5

これを、90度回転させると、

4 2 0
5 3 1

になるのだけれども、左下の4から上方向に移動していっているので、計算が少し重くなっています。
これを、Y反転させてやると、

4 5
2 3
0 1

としてやると、左上から下方向に移動することができるので、計算が少し軽くなります。
今までは、

p = width * (height - 1);
j = p - (i % height) * width + i / height;

となっていたのですが、Y反転させると、

j = (i % height) * width + i / height;

となり、減算が1つ減ります。
これを最適化すると、

public void rotate90( ){
    int j;
    int w = width;
    int h = height;
    int i;
    int p;
    byte[] buf = pixelbuf;
    
    flipY( );
    
    for( i = w * h - 1 ; i > 0 ; i=i+1 ){
        j = i;
        do{
            j = (j % h) * w + j / h;
        }while( j > i );
        p = buf[ i ];
        buf[ i ] = buf[ j ];
        buf[ j ] = p;
    }
    width = h;
    height = w;
}

こんな感じですかね。
do,whileの中で使われている変数を、全てプライム変数にすることが出来ました。
これで少しは速くなるはず……。
いや、逆にY反転で遅くなってるかも(;´Д`)