为什么Java AffineTransforms反向复合?

时间:2014-04-01 20:23:24

标签: java swing graphics2d affinetransform

使用Graphics2DAffineTransforms完成的Java转换具有最后指定的首次应用顺序。例如,要旋转组件然后对其进行翻译,首先要调用translate()以及之后的rotate()。这是为什么?是否有一些有利于它的应用程序或实现?对我而言,这似乎是违反直觉的。

我知道AffineTransforms用矩阵表示,并且(虽然我不知道细节)多个变换可以通过将矩阵相互相乘来连接。我不明白的是为什么这似乎是右乘,而不是左乘。

1 个答案:

答案 0 :(得分:4)

以这种方式思考:稍后指定的变换更接近于随后的绘图原语,因此首先应用。

此序列使得将变换应用于复杂绘图变得更加简单。假设你有一个方法可以绘制一些复杂的数字,并使用自己的转换。您希望图形以不同的大小显示两次。您可以先设置缩放转换,然后调用方法。对于第二次出现,您设置另一个缩放,然后再次调用您的方法。

如果转换是以其他顺序指定的,那么这是不可能的。