我的工作中,我使用仿射變換移動圓形物體周圍的JPanel的一個項目,但我沒有看到的影響我會方面。Java的仿射變換量表()
我創建使用區級建設性的幾何形狀。我將它的位置和大小設置爲構造函數的一部分與
// Set location and size
AffineTransform at = new AffineTransform();
at.translate(x, y);
at.scale(size, size);
shape.transform(at);
這似乎工作正常。我看到的問題是當我單獨調用重新調整形狀時。
/**
* Scales this shape uniformly by the
* amount of scale about the origin
* @param scale - double
*/
public void scaleBy(double scale)
{
double cx = this.getBounds2D().getCenterX();
double cy = this.getBounds2D().getCenterY();
double size = this.getBounds2D().getWidth();
System.out.println("Before ~ Size: " + size + " | Scale: " + scale);
AffineTransform at = new AffineTransform();
at.translate(cx, cy);
at.scale(scale, scale);
at.translate(-cx, -cy);
shape.transform(at);
System.out.println("After ~ Size: " + size + " | Scale: " + scale);
}
的打印報表顯示,有大小沒有變化之前和之後調用:
Before ~ Size: 159.61132183122953 | Scale: 0.9703729137903474
After ~ Size: 159.61132183122953 | Scale: 0.9703729137903474
Before ~ Size: 84.00595885854187 | Scale: 1.0692249107993637
After ~ Size: 84.00595885854187 | Scale: 1.0692249107993637
我想我的問題是沒有,直到重繪()調用時的變換不會發生?如果是這樣,限制大小以保持形狀在30.0到150.0之間的一個好方法是
轉型不會影響您的變量 – MadProgrammer
雖然「CX」和「CY」我不希望改變,應該不是「大小」反映了在形狀內部調整大小的改變? – jbolt
'變形'不可能改變原始形狀,而是返回一個變形的形狀......但我不知道'形狀'是什麼所以很難說.... – MadProgrammer