【发布时间】:2022-02-03 19:11:29
【问题描述】:
我正在学习 Java。我已经解决了这个问题,但是我对 2D 图形有一个大问题。在讲座中,关于AffineTransform,我们了解到这些代码:
1. translate(double x, doubley),
2. scale(double x, double y),
3. rotate(double theta),
4. shear(double x, double y),
5. transform(AffineTransform at) and
6. setTransform(AffineTransform).
我现在最大的问题是我们的教授说,有了这些代码,所有关于转换的事情都是可行的。这就是他向我们展示的全部内容。
AffineTransform at = AffineTransform.getTranslateInstance(this.pos.getX(), this.pos.getY());
at.concatenate(AffineTransform.getScaleInstance(this.scaleX, this.scaleY));
Shape shape = at.createTransformedShape(this.form);
Point2D center = getCenter(shape);
at = AffineTransform.getRotateInstance(this.winkel, center.getX(), center.getY());
return at.createTransformedShape(shape);
例如,我现在的问题是这个。为什么我们不使用例如at.rotate 而我们使用at = AffineTransform.getRotateInstance?
为什么我们使用at=AffineTransform.getTranslateInstance 而不是at.translate?
我不明白。我们的教授说命令已经足够了,现在添加了新的?我可以制作这段代码中的内容吗?相当于我列出的代码?
因为我们的教授说我可以用我列出的代码做任何事情,但导师从不使用它们!他使用了我没有得到的这些代码,我一直在练习和训练这些列出的代码,现在我很惊讶。
我的主要问题是:我能否以某种方式使用列出的代码获得与粘贴的代码相同的结果?有什么办法可以代替吗?
【问题讨论】:
-
getXxxstatic方法为您提供了一个起点,与必须直接使用构造函数不同,它们是令人信服的方法。一旦你有了类的实例,你就可以应用额外的转换 -
你“可以”做类似
AffineTransform at = new AffineTransform();然后at.rotate(this.winkel, center.getX(), center.getY());的事情,但是你必须问“为什么”这个问题?当你可以只在一行上使用getRotateInstance;) -
好的,谢谢,但是我如何使用 erxamle AffineTransform at = new AffineTransform() 然后 at.rotate(this.winkel, center.getX(), center.getY());在此之后连接?例如 getRotateInstance 我现在如何使用连接,但我如何使用它,例如 at.rotate?
-
对转换的每个附加操作都会被连接起来,仅仅因为你开始使用
getXxx方法没有区别,它只是一个说服方法 -
对不起,这个愚蠢的问题,但你能不能把我帖子中的代码“翻译”为一个正常的答案,没有那个 get 但有连接,我可以看到一次吗? (对不起,我是菜鸟)
标签: java swing affinetransform