2012-12-06 13 views
0

我想縮放形狀。爲什麼移動我在java中使用仿射變換的位置1.6se

所以我在仿射變換中使用setToScale方法。

那麼,不僅形狀的長度爲反式,而且形狀的出發點移動

爲什麼?

public void initResize(int x, int y) { 
    oldX = x; 
    oldY = y; 
} 

public void resize(int x, int y) { 
    double xratio = (double)(x - shape.getBounds().x)/(shape.getBounds().width); 
    double yratio = (double)(y - shape.getBounds().y)/(shape.getBounds().height); 

    af.setToScale(xratio, 1); 
    shape = af.createTransformedShape(shape); 
    anchor.resize(shape.getBounds()); 

    oldX = x; 
    oldY = y; 
} 

方法調用的順序是MousePress:initResize,MouseDrgged:調整

的x,y是鼠標的座標

+2

因爲這就是縮放比例。如果你想保留起點,你也需要翻譯。 –

回答

0

你必須在AffineTransform對象上應用的操作。在你的情況下,你想要縮放:

af.scale(xratio, 1); 

這個想法是,你將當前矩陣乘以代表比例的矩陣。這就是組合變換的工作方式:乘以矩陣(注意!乘法的次序很重要,當矩陣相乘時也是A * B!= B * A)。

這不是清除整個矩陣,而是按照矩陣的默認線性比例模板插入比例值。