Java中的几何变换序列

时间:2016-09-30 20:40:27

标签: java graphics affinetransform

让我们说我有一个形状,我想对它进行一系列的转换。例如,{rotate(1), translate(2), translate(3), rotate(4), translate(5)}

要执行此操作,您需要将它们插入AffineTransform"转换"按相反的顺序:

transform.translate(5)

transform.rotate(4)

等...

让我们说有一个共同的转换序列,我想存储在AffineTransform对象中,并作为我整个转换序列的一部分添加。我不确定是否应该使用concatenate()方法或preconcatenate()方法以及我应该按什么顺序调用它。有没有人有这方面的经验?

1 个答案:

答案 0 :(得分:1)

文档很清楚。例如,rotate()状态的文档:

  

将此变换与旋转变换连接

因此,您必须.concatenate()

假设您的转换包含部分转换M1M4

T = M1 * M2 * M3 * M4

并假设部分变换对应于:

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

注意:我还没有检查连接实际上是否意味着向右移动。但即使它意味着向左乘法,上述程序也不会改变。