我正在一个项目中,我正在使用Affine Transform在JPanel上移动圆形对象,但没有看到要表现出的影响。
我正在使用具有构造性几何的Area类来创建形状。我将其位置和大小设置为构造函数的一部分
// 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);
}
prints语句显示在调用前后大小没有变化:
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
我想我的问题是,直到进行repaint()调用后,转换才会发生吗?如果是这样,最好的方法是限制尺寸以将形状保持在30.0到150.0之间
最佳答案
您正在从应用转换之前获得的局部变量打印尺寸和比例。尝试从形状中获取实际值。
关于java - Java仿射变换Scale(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19479828/