プロが教える店舗&オフィスのセキュリティ対策術

GraphicsのdrawImageに2次元のアフィン変換の行列の要素を
指定して描画して、アフィン変換後に座標の取得したいのですが、
上手くいきません。

[ x'] [m00 m01 m02] [ x ]
[ y'] = [m10 m11 m12] [ y ]
[ 1 ] [ 0 0 1] [ 1 ]

これを計算すると
[ x'] [m00 * x + m01 * y + m02]
[ y'] = [m10 * x + m11 * y + m12]
[ 1 ] [ 1 ]

となり、
座標(x', y') = (m00 * x + m01 * y + m02, m10 * x + m11 * y + m12)
座標(x', y')に表示されるはずですが、別の座標に表示されています。
行列の計算のどこに間違いがあるのかわかりません。

計算の仕方をご存知でしたら教えてください。
また参考になるURLをご存知でしたら教えてください。

A 回答 (3件)

> 短形は画面中央で回転せずに


だって、回転はさせてないから…。
矩形の左隅の位置が、最初の(x,y)から変わっただけでしょ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
初歩的な勘違いをしていました。
無事に解決できました。

お礼日時:2008/04/02 14:35

> g.drawImage(image, matrix);


これは、あなたの自作のメソッドですか?
いずれにしても、あなた以外の人にとっては謎です。
もっとちゃんと説明してくださいませんか?
    • good
    • 0

計算自体は正しいんじゃないですか。


あとは、あなたが、何かを錯覚または誤解してるのか??
詳細は現時点では分かりませんが。

この回答への補足

// グラヒィックスオブジェクト
Graphics g = getGraphics();
int matrix = new int[6];
画像を表示する座標をx, y、幅をw、高さhがのイメージを画面の中心点で回転するようにした行列をmatrixに格納します。
g.drawImage(image, matrix);

次に画像の位置を調べるために短形を表示します。
int ix = 0, iy = 0;
ix = matrix[0] * x + matrix[1] * y + matrix[2];
iy = matrix[3] * x + matrix[4] * y + matrix[5];
g.fillRect(ix, iy, w, h);

drawImageで表示された画像は画面中央で回転しますが、
fillRectで表紙した短形は画面中央で回転せずに別の軸を中心に回転してしまいます。

どのように計算したら、短形の位置と画像の位置の基点を合わせることが
できるのでしょうか?

補足日時:2008/03/28 13:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!