Java 中的几何变换序列

Geometric transform sequences in Java

假设我有一个形状,我想对其执行一系列变换。例如,{rotate(1), translate(2), translate(3), rotate(4), translate(5)}.

要执行该操作,您需要将它们以相反的顺序插入 AffineTransform "transform":

transform.translate(5)

transform.rotate(4)

等...

假设有一个通用的转换序列,我想将其存储在 AffineTransform 对象中并添加为我的整个转换序列的一部分。我不确定我应该使用 concatenate() 方法还是 preconcatenate() 方法以及我应该以什么顺序调用它。有没有人有这方面的经验?

文档很清楚。例如,rotate() 的文档指出:

Concatenates this transform with a rotation transformation

因此,你必须.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

注意:我还没有检查 concatenation 是否真的意味着向右乘。但是即使是左乘,上面的过程也不会改变。