我正在學習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);
例如,我現在的問題是這個。為什么我們不使用 exampleat.rotate而我們使用at = AffineTransform.getRotateInstance?
為什么我們使用at=AffineTransform.getTranslateInstance而不是at.translate?
我不明白。我們的教授說命令已經足夠了,現在添加了新的?我可以使此代碼中的內容與我列出的代碼等效嗎?
因為我們的教授說我可以用我列出的代碼做任何事情,但是老師從不使用它們!他使用這些我沒有得到的代碼,我一直在練習和訓練這些列出的代碼,現在我很驚訝。
我的主要問題是:我能否以某種方式使用列出的代碼獲得與粘貼的代碼相同的結果?有什么辦法可以代替這個嗎?
uj5u.com熱心網友回復:
請注意,該方法AffineTransform使用concatenate()不可交換的矩陣乘法。連接轉換的優點是可以執行一次乘法,結果可以重復使用。著眼于這里參考的具體示例,給定一個名為 的恒等變換:at
AffineTransform at = new AffineTransform();
以下三個公式是等價的:
at.translate(SIZE/2, SIZE/2);
at.scale(60, 60);
at.rotate(Math.PI/4);
at.concatenate(AffineTransform.getTranslateInstance(SIZE / 2, SIZE / 2));
at.concatenate(AffineTransform.getScaleInstance(60, 60));
at.concatenate(AffineTransform.getRotateInstance(Math.PI / 4));
at.preConcatenate(AffineTransform.getRotateInstance(Math.PI / 4));
at.preConcatenate(AffineTransform.getScaleInstance(60, 60));
at.preConcatenate(AffineTransform.getTranslateInstance(SIZE / 2, SIZE / 2));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429900.html
