いっつも分からなくなるのでメモ。
A = A×Bにしたいとき
A.concatenate(B)
A = B ×Aにしたいとき
A.preConcatenate(B)
Rθをθ(rad)の回転行列とする
A = A×Rθとしたい場合
A.rotate(θ)
A=Rθ×Aが欲しいとき
手段無し。
(A.preConcatenate(AffineTransform.getRotateInstance(θ))とするしかない)
平行移動Tとする。
A = A×Tとしたい場合
A.translate(x,y)
A=T×Aが欲しいとき
手段無し。
(A.preConcatenate(AffineTransform.getTranslateInstance(x,y))とするしかない)
拡大変換Sとする。
A = A×Sとしたい場合
A.scale(x,y)
A=S×Aが欲しいとき
手段無し。
(A.preConcatenate(AffineTransform.getScaleInstance(x,y))とするしかない)
こうやってみると、preConcatenate(=B×A)に対応する回転、移動、拡大変換がないのが微妙に不便ですな。