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

out*_*lou 2 java translation 2d rotation affinetransform

我是一个在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);              
    }  
}  
Run Code Online (Sandbox Code Playgroud)

我的翻译执行方法

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);  
    }  
} 
Run Code Online (Sandbox Code Playgroud)

任何帮助都可以非常感激

Thr*_*986 5

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

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

请注意,可以立即应用步骤3和4.

如果在原点以外的位置尝试旋转,则实现"旋转"效果 - 物体看起来围绕原点旋转.