從我想展示一個實際的尖端即旋轉字符串或其他對象時,我通常採用的模式已經被其他給出的答案
除了:
- 移動旋轉點(X,Y )對空間應用
translate(-x,-y)
原點。
- 做旋轉
rotate(angle)
(也可能縮放將在這裏完成)
- 將所有內容移回原始點
translate(x,y)
。
請記住,您必須以相反的順序應用這些步驟(請參閱垃圾回答)。
對於第一次翻譯的字符串,我通常會將邊界框的中心移動到原點,並使用最後一個翻譯將字符串移動到中心應該出現在屏幕上的實際點。然後,我可以簡單地在任何我喜歡的位置繪製字符串。
Rectangle2D r = g.getFontMetrics().getStringBounds(text, g);
g.translate(final_x, final_y);
g.rotate(-angle);
g.translate(-r.getCenterX(), -r.getCenterY());
g.drawString(text, 0, 0);
或替代地
Rectangle2D r = g.getFontMetrics().getStringBounds(text, g);
AffineTransform trans = AffineTransform.getTranslateInstance(final_x, final_y);
trans.concatenate(AffineTransform.getRotateInstance(-angle));
trans.concatenate(AffineTransform.getTranslateInstance(-r.getCenterX(), -r.getCenterY()));
g.setTransform(trans);
g.drawString(text, 0, 0);
這是一個比編程更多的數學問題。查看維基百科關於它的頁面: http://en.wikipedia.org/wiki/Affine_transformation 不是說它比JavaDoc更容易理解。 :)不幸的是,這只是你必須蠻橫逼迫你學習的其中一件事,恕我直言。 – brindy 2011-04-14 21:58:02