11

画像のピクセル データの配列があります。私が取得している画像は、すでに 270 度回転しています。そのため、正しい画像を得るために、もう一度 90 度回転させようとしています。data[x][y]に変更して転置アルゴリズムを試しましたdata[y][x]が、それが正しい方法だとは思いません。回転させるにはどうすればよいですか?

4

4 に答える 4

15

O(1) スペースを使用してインプレースで実行する場合は、次のようにします。

  1. data[i][j]とを交換して行列を転置しdata[j][i]ます。

    for (int i = 0; i < n; i += 1) {
        for (int j = i+1; j < n; j += 1) {
            swap(data[i][j], data[j][i]);
        }
    }
    
  2. 各行または列を逆にして、それぞれ +90 度または -90 度回転します。たとえば、+90 度の回転の場合:

    for (int i = 0; i < n; i += 1) {
        for (int j = 0; j < n/2; j += 1) {
            swap(data[i][j], data[i][n-1-j]);
        }
    }
    
于 2016-02-01T18:46:40.560 に答える