java - 如何用仿射变换旋转并保持原来的坐标系?

标签 java rotation 2d translation affinetransform

我是一个在 Java Swing 上旋转和平移形状的命令模式 平移和旋转分别工作得很好,但是当我做 60 度时。旋转然后平移,平移遵循新的旋转坐标。 这意味着如果我拖动鼠标,形状会以与鼠标移动 vector 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 可以同时应用。

如果尝试在原点以外的位置进行旋转,则会实现“旋转”效果 - 对象看起来围绕原点旋转。

关于java - 如何用仿射变换旋转并保持原来的坐标系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905263/

相关文章:

Java 6 - 注释处理器和代码添加

java - 我怎样才能使 JFrame 内容更改为相应的点击?

Java JTree 获取所选节点的名称

ios - UINavigationBar 旋转和自动布局

android - 创建监听器 onRotate()

java - 停止空格键按键在 Eclipse 中触发自动完成

ios - 从一个位置移动到另一个位置后 UIButton 框架发生变化

java - Processing(二维图形)是否适合大型项目?

java - 实现以下方法对二维数组中的行进行排序

java - 如何对二维数组进行升序排序? java