画像を90度回転させるメソッド

引き続き『世界で闘うプログラミング力を鍛える150問』の問題を解いている。

N * N の行列に描かれた、1つのピクセルが4バイト四方の画像があります。その画像を90度回転させるメソッドを書いてください。あなたはこれを追加の領域なしでできますか?

分割統治

大きい問題は小さく分割して考えよう。二次元の行列を右回しすることが問題を、一番外側の要素だけを回転する問題だと置き換えよう。

『世界で闘うプログラミング力を鍛える150問』に載っている図を引用しよう。

rotate each element

図のように、左側の列を上側に、上側の行を右側に… という風に回転するとしよう。

そう考えると、この問題は外側から内側まで繰り返しで1列ずつ回転させる問題に置き換えることができる。N は各行の要素数だ。

この実装だと t = pixels[i][j] の他は追加の要素を使わずに回転ができる。許容範囲だろう。

おまけ

実行可能なサンプル実装を示してこの記事を終わらせる。

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中