gpt4 book ai didi

java - AffineTransform 实例的串联是否需要 Java 中的特定顺序?

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:40 27 4
gpt4 key购买 nike

我有一组 AffineTranform 实例。根据具体情况,我需要连接其中任何一个 - 条件在这里并不重要。这样做的时候,我发现连接的顺序似乎很重要。查看示例,我有:

  1. 一个缩放和平移的原始转换“原始”2。一个单位矩阵'一'
  2. 一个单位矩阵'二'
  3. 一个可扩展的转换“规模”
  4. 一个转换'翻译',翻译

在示例中,我创建了以下组合:1. 一个 x 缩放 x 平移2. 两个x translatex scale

根据 Java 文档,矩阵在连接时应该相乘,但查看示例代码的输出会显示不同的结果。

Java 版本:Java 6 SE 更新 30

示例:

package affinetransformationtest;

import java.awt.geom.AffineTransform;

public class AffineTransformationTest {

public static void main(String[] args) {
AffineTransform original = new AffineTransform(10, 0.0, 0.0, 100, 2, 3);
System.out.println("original: " + original);
System.out.println("");

AffineTransform scale = AffineTransform.getScaleInstance(10, 100);
AffineTransform translate= AffineTransform.getTranslateInstance(2, 3);

AffineTransform one = new AffineTransform();
System.out.println("one: " + one);
one.concatenate(scale);
System.out.println("one + scale: " + one);
one.concatenate(translate);
System.out.println("one + scale + translate: " + one);
System.out.println("Is one equal to original: " + original.equals(one)); //is false
System.out.println("");

AffineTransform two = new AffineTransform();
System.out.println("two: " + two);
two.concatenate(translate);
System.out.println("two + translate: " + two);
two.concatenate(scale);
System.out.println("two + translate + scale: " + two);
System.out.println("Is two equal to original: " + original.equals(two)); //is true
System.out.println("");
}
}

输出:

original: AffineTransform[[10.0, 0.0, 2.0], [0.0, 100.0, 3.0]]

one: AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
one + scale: AffineTransform[[10.0, 0.0, 0.0], [0.0, 100.0, 0.0]]
one + scale + translate: AffineTransform[[10.0, 0.0, 20.0], [0.0, 100.0, 300.0]]
Is one equal to original: false

two: AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
two + translate: AffineTransform[[1.0, 0.0, 2.0], [0.0, 1.0, 3.0]]
two + translate + scale: AffineTransform[[10.0, 0.0, 2.0], [0.0, 100.0, 3.0]]
Is two equal to original: true

Java 有问题还是我的代码有错误?
感谢您的任何提示。

最佳答案

顺序很重要。看看你的第二个串联,你实际上也在缩放你的翻译,因为它之前被应用过。

关于java - AffineTransform 实例的串联是否需要 Java 中的特定顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com