使用Graphics2D
和AffineTransforms
完成的Java 转换具有最后指定、先应用的顺序。例如,要旋转组件然后平移它,您首先调用 translate()
,然后调用 rotate()
。这是为什么?是否有一些有利于它的应用程序或实现?对我来说,这似乎违反直觉。
我知道AffineTransforms
是用矩阵表示的,并且(虽然我不知道细节)可以通过将矩阵相互相乘来连接多个变换。我不明白的是为什么这似乎是右乘而不是左乘。
最佳答案
这样想:后面指定的变换更接近后面的绘图基元,因此首先应用。
此序列使对复杂绘图应用变换变得更加简单。假设您有一个方法可以绘制一些复杂的图形并且自身也使用转换。您希望图形以不同的尺寸出现两次。您可以先设置缩放变换,然后调用您的方法。对于第二次外观,您设置另一个缩放比例,然后再次调用您的方法。
如果以其他顺序指定转换,则这是不可能的。
关于java - 为什么 Java AffineTransforms 是反向复合的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796137/