我是一个在Java Swing上旋转和转换形状的命令模式 翻译和旋转分离得很好,但是当我做60度时。旋转然后平移,平移跟随新的旋转坐标。 这意味着如果我拖动鼠标,形状会与鼠标移动矢量间隔60度移动 有什么简单的解决方案吗?请帮忙,我在这里碰墙了
我的旋转执行方法
public void execute() {
System.out.println("command: rotate " + thetaDegrees );
Iterator iter = objects.iterator();
Shape shape;
while(iter.hasNext()){
shape = (Shape)iter.next();
mt.addMememto(shape);
AffineTransform t = shape.getAffineTransform();
t.rotate(Math.toRadians(thetaDegrees), shape.getCenter().x, shape.getCenter().y);
shape.setAffineTransform(t);
}
}
我的翻译执行方法
public void execute() {
Iterator iter = objects.iterator();
Shape shape;
while(iter.hasNext()){
shape = (Shape)iter.next();
mt.addMememto(shape);
AffineTransform t = shape.getAffineTransform();
System.out.println("Translation x :"+x + ", Translation y :"+y);
t.translate(x,y);
shape.setAffineTransform(t);
}
}
可以非常感谢任何帮助
答案 0 :(得分:5)
要完成“就地”旋转(对象围绕其自身轴旋转),您必须:
请注意,步骤3和4可以立即应用。
如果在原点以外的位置尝试旋转,则会实现“旋转”效果 - 对象看起来围绕原点旋转。
答案 1 :(得分:1)
您正在使用特殊的旋转功能,该功能将考虑形状的偏移,以便围绕其中心正确旋转。但是,您需要为translate函数执行类似操作,以便考虑形状的方向。
尝试使用此功能代替您的翻译功能:
public void execute() {
Iterator iter = objects.iterator();
Shape shape;
while(iter.hasNext()){
shape = (Shape)iter.next();
mt.addMememto(shape);
AffineTransform t = new AffineTransform();
System.out.println("Translation x :"+x + ", Translation y :"+y);
t.translate(x,y);
t.concatenate(shape.getAffineTransform());
shape.setAffineTransform(t);
}
}
这将在原始坐标系中执行转换。