我有两种形状,我想进行缩放,我使用以下代码
Iterator iter = objects.iterator();
Shape shape;
while(iter.hasNext()){
shape = (Shape)iter.next();
AffineTransform t = shape.getAffineTransform();
int x = shape.getCenter().x;
int y = shape.getCenter().y;
t.translate(-x, -y);
t.scale(sx,sy);
t.translate(x, y);
shape.setAffineTransform(t);
}
形状被缩放但它们之间的距离变得更小
我想从两个形状制作复合形状然后缩放它。 还有另一种保持比例的方法吗?谢谢
答案 0 :(得分:2)
计算这些转换的最佳方法是抓取铅笔和纸张,绘制坐标系并按照纸张上的变换进行操作。
答案 1 :(得分:0)
您的代码围绕其中心缩放每个形状。这意味着下面的线向下移动,上面的线向上移动。这就是他们似乎一起搬家的原因。
为了不发生这种情况,您必须缩放下边界(上部形状)和上部边界(下部形状)上的点的形状。使“y”变量成为适当的边界。
作为替代(和等效)方法,在缩放后将每个形状转换为适当的数量。
答案 2 :(得分:0)
如果您想要真正的缩放,这意味着缩放形状和它们之间的空白区域。如果你按照天真的路线(缩放每个形状,然后缩放从形状到其他每个形状的距离),结果就不对了。
我所知道的一种方法是将两个形状的中心之间的距离视为具有固定方向的“吸引”力的矢量。然后缩放这些力量的大小,找到使他的系统再次平衡的点。在某个地方,数学应该在那里。我很久以前就看到它似乎在另一个生命中。
答案 3 :(得分:0)
谢谢大家的答案,我找到了一个适合我的解决方案
while(iter.hasNext()){
shape = (Shape)iter.next();
AffineTransform t = new AffineTransform();
t.scale(sx,sy);
t.concatenate(shape.getAffineTransform());
shape.setAffineTransform(t);
}
}