让我们说我有一个形状,我想对它进行一系列的转换。例如,{rotate(1), translate(2), translate(3), rotate(4), translate(5)}
。
要执行此操作,您需要将它们插入AffineTransform"转换"按相反的顺序:
transform.translate(5)
transform.rotate(4)
等...
让我们说有一个共同的转换序列,我想存储在AffineTransform对象中,并作为我整个转换序列的一部分添加。我不确定是否应该使用concatenate()
方法或preconcatenate()
方法以及我应该按什么顺序调用它。有没有人有这方面的经验?
答案 0 :(得分:1)
文档很清楚。例如,rotate()
状态的文档:
将此变换与旋转变换连接
因此,您必须.concatenate()
。
假设您的转换包含部分转换M1
至M4
:
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
注意:我还没有检查连接实际上是否意味着向右移动。但即使它意味着向左乘法,上述程序也不会改变。