私は行列A[M][M]
を持っています。新しい位置が元の行列の外にある値を破棄し、欠損値をゼロで埋めて、行列の中心に対して度回転します。私は彼の新しい位置を取得するには、次の式を使用しています:行列をN度回転させる
newXPosition = ceil(cos(N*PI/180)*(oldXPosition - M/2) - sin(N*PI/180)*(oldYPosition - M/2) + M/2)
newYPosition = ceil(sin(N*PI/180)*(oldXPosition - M/2) + cos(N*PI/180)*(oldYPosition - M/2) + M/2)
しかし、これはいくつかの時点で失敗しています。 oldXPosition = oldYPosition = 0, M = 32 and N = 90º
についてnewXPosition
とnewYPosition
を検索すると、newXPosition = 32, newYPosition = 0
が得られます。次元が[0-31]であることを考慮すると、newXPosition
に1を引くだけでは機能しません。なぜなら、他の場合には、差し引かなければならない変数、あるいはその両方がnewYositionになるからです。
私はどこで失敗したのか誰にも分かりますか?
PS:私はすでにthe 90 degrees rotationに関するいくつかの回答を読んでいますが、私の意図は、マトリックスを90度回転させるのではなく、N
です。
cos/sinは引数として度をとらないので、[radians]をとります(http://www.cplusplus.com/reference/cmath/cos/) – UKMonkey
画像の長さが0から31の場合実際の中心は31/2 = 15.5です。境界の外にあるピクセルを破棄しているため、そのようなピクセルは1つだけです。 – LutzL