2

おそらくこれには簡単な数学的解決策があることは知っていますが、それを得ることができませんでした(長い長いプロセスを実行する必要はありません)。

幅 1200px x 高さ 800px の横長の画像があるとします。次に、画像を時計回りに 90、180、または 270 度回転させます。

回転した画像で点 (座標) が選択されている場合、元の回転していない画像の座標をどのように判断すればよいですか?

簡単な例として: 上の画像を 180 度回転させ、座標を 100、100 (左上隅) に設定すると、回転していない画像では同じ座標が 1100、700 (右下) になります。画像。

構文に関しては、Javascriptでこれを計算しようとしています

ありがとう!

4

2 に答える 2

3

これを行う数学的に形式的な方法は、回転行列を使用することです

たとえば、反時計回りに 90 度回転する場合、回転行列は次のようになります。

R(90) = [0 -1]
        [1  0]

行列の乗算式は次のようになります。

[x90] = [0 -1][x]
[y90]   [1  0][y]

行列の乗算を使用して、これを標準表記に展開します。

x90 = -y;
y90 =  x;

これは原点 [0, 0] を中心に回転するため、すべての +ve 座標を取得するには正規化する必要があることに注意してください。これを JavaScript で書くと、次のようになります。

x90 = ymax - y;
y90 = x;

ここで、[x,y] は元の座標、[x90, y90] は回転した座標、[xmax, ymax] は元の画像の幅と高さです。

180 度の場合、回転行列は次のとおりです。

R(180) = [-1  0]
         [ 0 -1]  

正規化を使用して JavaScript に変換する:

x180 = xmax - x;
y180 = ymax - y;

反時計回りの 270 度の場合、回転行列は次のようになります。

R(270) = [ 0 1]
         [-1 0]  

正規化を使用して JavaScript に変換する:

x270 = y;
y270 = xmax - x;
于 2013-11-13T17:33:29.713 に答える
0

MathOverflow に関するこの同様の質問と回答は、あなたが望むものでなければなりません。

tl;dr:

x' = x*cos(θ) - y*sin(θ)
y' = x*sin(θ) + y*cos(θ)

{x,y}元のポイント、θ回転角度、および{x',y'}新しいポイントです。

于 2013-11-13T17:15:07.387 に答える