为什么移动我在java 1.6se中使用仿射变换的位置

时间:2012-12-06 21:16:11

标签: java affinetransform

我想缩放形状。

所以我在仿射变换中使用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是鼠标的坐标

1 个答案:

答案 0 :(得分:0)

您必须对AffineTransform对象应用操作。在您的情况下,您想缩放:

af.scale(xratio, 1);

我们的想法是将当前矩阵与表示比例的矩阵相乘。这就是组合变换的工作方式:乘以矩阵(注意!乘法的顺序很重要,乘以矩阵时A * B!= B * A)。

这不是清除整个矩阵,而是在矩阵的默认线性比例模板之后插入缩放值。