[英]How to Rotate with AffineTransform and keep the orignal coordinates system?
我是一个在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);
}
}
任何帮助都可以由衷地感谢
要完成“就地”旋转(对象围绕其自身的轴旋转),您必须:
请注意,可以同时应用步骤3和4。
如果在原点以外的位置尝试旋转,则会实现“旋转”效果-物体似乎围绕原点旋转。
您正在使用特殊的旋转功能,该功能将考虑形状的偏移量,以便围绕其中心正确旋转。 但是,您需要对平移功能执行类似的操作,以考虑形状的方向。
为您的翻译功能尝试以下方法:
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);
}
}
这将在原始坐标系中执行平移。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.