繁体   English   中英

如何使用AffineTransform旋转并保持原始坐标系?

[英]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);  
    }  
} 

任何帮助都可以由衷地感谢

要完成“就地”旋转(对象围绕其自身的轴旋转),您必须:

  1. 将对象转换为原点
  2. 应用旋转
  3. 转换回原始位置
  4. 应用所需的翻译

请注意,可以同时应用步骤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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM