私はグラフィックスコンテキスト上にベクトルを描く一連のJava2D呼び出しを持っています。画像が2倍に拡大され、90度回転させたいと思います。私はこれを行うには、次のコードを使用してい回転とスケーリング - 両方の方法と正しい結果を得るにはどうすればいいですか?
:
Graphics2D g2 = // ... get graphics 2d somehow ...
AffineTransform oldTransform = g2.getTransform();
AffineTransform newTransform = (AffineTransform)oldTransform.clone();
newTransform.concatenate(AffineTransform.getTranslateInstance(x1, x2));
newTransform.concatenate(AffineTransform.getScaleInstance((double)newW/(double)iconW, (double)newH/(double)iconH));
newTransform.concatenate(AffineTransform.getRotateInstance(Math.toRadians(rotationAngle), (double)iconW/2.0d, (double)iconH/2.0d));
// ... do my drawing ...
これが回転するとスケールが、しかし、スケールは私が望む方法を適用されません。これは、あたかもスケーリング前に回転されているように、間違った軸で画像を拡大します。
これを行うより良い方法はありますか?
これは機能しますが、わかりません。翻訳を最初に適用するのはなぜ大丈夫ですか?つまり、翻訳が最初の場合は最初に起こります。しかし回転が最初に適用されても、スケールはスケールの後で回転しますか?そこに私は理解していない何かがあります。 – jsight
変換が正しく動作する理由を正確に説明するのは難しいですが、基になる行列の数学を見れば、なぜ意味があるのでしょうか。 –