簡體   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