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()
。
假设您的转换包含部分转换 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
注意:我还没有检查 concatenation 是否真的意味着向右乘。但是即使是左乘,上面的过程也不会改变。
假设我有一个形状,我想对其执行一系列变换。例如,{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()
。
假设您的转换包含部分转换 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
注意:我还没有检查 concatenation 是否真的意味着向右乘。但是即使是左乘,上面的过程也不会改变。