gpt4 book ai didi

java - 为什么 AffineTransform 旋转时会缩放

转载 作者:行者123 更新时间:2023-12-02 05:16:54 25 4
gpt4 key购买 nike

这可能更像是一个数学问题,但为什么这个方法会失败?

public void test() {
AffineTransform transform = AffineTransform.getRotateInstance(1);

System.out.println("scaleX = " + transform.getScaleX() + ", " + "scaleY = " + transform.getScaleY());

Assert.assertEquals(1, transform.getScaleX(), 0.001); // fails
Assert.assertEquals(1, transform.getScaleY(), 0.001); // fails, too
}

输出为:scaleX = 0.5403023058681398,scaleY = 0.5403023058681398

仅从观察角度来看,我认为旋转时缩放比例不应改变。

最佳答案

您获得的scaleX和scaleY值实际上是cos(1 rad),这是正确的。

它们不代表应用仿射变换后对象的比例。根据this documentation ,scaleX是变换前初始X坐标对变换后最终X坐标的贡献。对于scaleY 也是如此。这并不意味着 x1 = x0*scaleX,而是 x1 = x0*scaleX + y0*m01y + m02。

要断言没有进行缩放,您可以获取变换的矩阵值并获取行列式。如果没有尺度或剪切,行列式将为 1。此外,表示位移的 2 个分量应为 0。

double[] m = transform.getMatrix()
Assert.assertEquals(1, m[0]*m[4] - m[1]*m[3], 0.001)
Assert.assertEquals(0, m[2], 0.001);
Assert.assertEquals(0, m[5], 0.001);

关于java - 为什么 AffineTransform 旋转时会缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838424/

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