【问题标题】:Why are Java AffineTransforms compounded in reverse?为什么 Java AffineTransforms 是反向复合的?
【发布时间】:2014-04-01 20:23:24
【问题描述】:

使用Graphics2DAffineTransforms 完成的Java 转换具有最后指定、最先应用的顺序。例如,要旋转组件然后平移它,首先调用translate(),然后调用rotate()。这是为什么?是否有一些支持它的应用程序或实现?对我来说,这似乎违反直觉。

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

【问题讨论】:

标签: java swing graphics2d affinetransform


【解决方案1】:

这样想:稍后指定的转换更接近随后的绘图图元,因此首先应用。

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

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

【讨论】:

  • 所以在您的paint() 方法中,这意味着您可以缩放 Graphics2D 对象,然后将其传递给子组件以应用需要首先发生的进一步转换,然后呢?我理解正确吗?
  • 是的,完全正确。它允许您设置适用于所有其余部分的转换。
  • 很高兴看到对此进行数学和/或编译时分析,重新:矩阵(左侧和/或右侧)乘法和线性代数。
猜你喜欢
  • 2012-06-29
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多