0

シェイプをスケーリングしたい。

だから私はアフィン変換で 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 : resize です。

x,y はマウス座標

4

1 に答える 1

0

AffineTransformオブジェクトに操作を適用する必要があります。あなたの場合、あなたはスケーリングしたいです:

af.scale(xratio, 1);

アイデアは、現在のマトリックスにスケールを表すマトリックスを掛けることです。これが、変換の組み合わせの仕組みです。行列を乗算することによって(行列を乗算するときは、乗算の順序が重要であり、A * B!= B * Aでもあることに注意してください)。

これは、マトリックス全体をクリアして、マトリックスのデフォルトの線形スケールテンプレートに従ってスケーリング値を挿入する代わりに。

于 2012-12-06T22:33:43.297 に答える