[英]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.