Java 如何使用仿射变换&x27;谁来翻译?
我不是问仿射变换是如何工作的,而是如何使用它的变换方法 我读了很多次API,但仍然不明白它是如何工作的 公共无效转换(双tx,双ty) 将此转换与转换转换连接起来。这相当于调用concatenate(T),其中T是由以下矩阵表示的仿射变换:Java 如何使用仿射变换&x27;谁来翻译?,java,swing,awt,affinetransform,Java,Swing,Awt,Affinetransform,我不是问仿射变换是如何工作的,而是如何使用它的变换方法 我读了很多次API,但仍然不明白它是如何工作的 公共无效转换(双tx,双ty) 将此转换与转换转换连接起来。这相当于调用concatenate(T),其中T是由以下矩阵表示的仿射变换: [ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ] 问题: translate(100,0)以某种方式将图像向右移动+100像素,向下移动+100像素。
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
问题:
Graphics
上下文的0x0
位置现在将从原始Graphics
上下文的原点开始100x0
请记住,翻译是累积的,这意味着如果您以前以某种方式翻译过图形
上下文,现在将添加到上下文中(第一次翻译0x100
,第二次翻译100x0
,您现在是从原始图形
上下文原点开始翻译的100x100
)
如果我需要经常移动图像,是否使用translate()来移动图像?如果不需要,建议使用什么方法/方法来移动帧中的旋转/旋转图像
通常,我使用Graphics#create
来创建Graphics
上下文的副本(这会复制当前状态/属性,但仍会将输出生成回Graphics
上下文的原始输出),将翻译应用于副本,绘制我想要的任何内容,然后对副本进行dispose
。这使原始上下文保持不变(关于我已更改的属性)
这意味着您可以单独执行多个翻译,这不会影响以后执行的其他翻译
另一种方法是反转翻译,但坦率地说,在副本上调用
dispose
更简单、更容易…1-通常是的,它应该移动100x和0y,为什么不需要一个可运行的示例来确定。2-这取决于。通常情况下,我会在应用它或保留co之前创建图形上下文的副本原稿的py,否则,您需要将其反转。请记住,您应用的任何翻译都非常感谢您的解决方案。但是,您是否能够解释为什么当我只向tx
提供100时,它会向下移动和向右移动?显示通过提供tx
100,图像应该只向右移动100πXEL。但是为什么java的翻译也会把它移下来?除非你能给出一个可运行的例子。否则你可能会考虑看看我可以用一个初始转换来解决什么问题。