2016-09-30 13 views
0

図形があり、その上で一連の変換を実行したいとしましょう。例えば{rotate(1), translate(2), translate(3), rotate(4), translate(5)}である。Javaの幾何学変換シーケンス

操作を実行するには、逆の順序で "変換" のAffineTransformに挿入したい:

transform.translate(5)

transform.rotate(4)

など..

AffineTransformオブジェクトに格納して、変換の全体シーケンスの一部として追加したい共通の変換シーケンスがあるとします。 concatenate()メソッドを使用するか、preconcatenate()メソッドを使用すべきか、どのような順序で呼び出すべきかはわかりません。誰にもこれに関する経験はありますか?

+0

両方の注文で2つの方法を呼び出すとどうでしょうか? 2つの変換を連結している場合、試してみると4つの順列しかありません。 –

答えて

1

ドキュメントは非常に明確です。例えば、rotate()状態のドキュメント:これは回転変換

に変換

連結しますので、あなたは.concatenate()する必要があります。

T = M1 * M2 * M3 * M4 

と部分変換はに対応することを前提としています:

は、あなたの変換が部分的変換のM4からM1から構成されていると

T.setToIdentity() 
.rotate(a)  //M1 
.translate(b) //M2 
.rotate(c)  //M3 
.translate(d) //M4 

(単なる説明として意図、実際の構文が正しくありません)

一般的な変換がM2 * M3の場合は、 :

common.setToIdentity() 
     .translate(b) //M2 
     .rotate(c) //M3 

そして:

T.setToIdentity() 
.rotate(a)   //M1 
.concatenate(common) //M2 * M3 
.translate(d)  //M4 

注:連結が実際に右に乗算を意味している場合、私はチェックしていません。しかし、たとえそれが左への乗算を意味するとしても、上記の手順は変わらないでしょう。

関連する問題