2016-03-23 45 views
0

私はどの方向に90度回転する必要がある画像を持っているとしましょう、私はちょうどその明確にする方法を理解できません。幅 - それはX、高さ - Yです。すでに180度回転していますが、90度は分かりません。回転行列/画像の公式90度C++

ここに例があります。 3x4ピクセルの画像があるとしましょう。幅= 3、高さ= 4、各セルのデータ量 - N = Width * Height = 3 * 4 = 12。さんが行列を作ってみましょう:

Here it is

簡単に行列を通過する式はy*Width + xです。そして、我々の回転180度の式は次のとおりです。

N - Width + x - y * Width 

だから我々は持っている:我々が得る

次の式を使用して
DataOut [y * Width + x] = DataIn [N - Width + x - y * Width] 

を:

this matrix

をしかし、私は来ることができません式は90度回転します。私を助けてくれますか?

+0

for(int i=0; i<cols; i++) { for(int j=1; j<=rows; j++) { datOut[i][j]= datIn[rows-j][i]; } } 

と1次元配列で90度の回転行列は '[[0、-1]、[1,0]]'であり、180度行列は '[[-1、0]、[0、-1]]'です。各点に行列を掛けて、点の回転した位置を取得します。任意の角度「a」について、回転行列は、[[cos(a)、-sin(a)]、[sin(a)、cos(a)]] 'である。 – thebjorn

答えて

0

(x + y *幅)を簡単な(x、y)表現に簡単に変換できます。

​​

直角回転は単なる座標スイッチであり、記号補正である可能性があります。

P rotate90(int x, int y){ 
    return point(y, x); 
} 

これは左手系では正回転である。 回転方向が間違っている場合は、幅からxを減算します。

2

あなたは、単にこのことにより、行列を回転させることができます:あなたは、例えば、このために行列乗算をする必要があります

for(int i=0; i<cols; i++) 
{ 
    for(int j=1; j<=rows; j++) 
    { 
     datOut[i * rows + j]= datIn[(rows-j) * cols + i]; 
    } 
} 
関連する問題