2009-11-26 64 views
1
protected void paintComponent(Graphics g) { 
    Graphics2D gr = (Graphics2D) g.create(); 
    // draw Original image 
    super.paintComponent(gr); 

    // draw 45 degree rotated instance 
    int aci=-45; 
    gr.transform(AffineTransform.getRotateInstance(Math.toRadians(aci))); 
    super.paintComponent(gr); 

    //translate rotated instance from origin to +10 on y axes 
    gr.translate(0,10); 
    super.paintComponent(gr); 
} 

但是,如果我想在原始圖像原點繪製旋轉的形狀怎麼辦?旋轉形狀java2d不失其原點

我的意思是我想旋轉它的原點而不滑動

+0

我真的不明白你想要做什麼...... 你想通過平面軸的原點或旋轉形狀的起源?? – 2009-11-26 12:17:58

回答

0

首先,小費。而不是gr.transform(blablabla);我想你可以使用gr.rotate(angle);

我不知道你正是在這裏做什麼,而是要做到點周圍旋轉的通常的方法是:

  • 由該點的x和y(不知道正面或負面的翻譯。 ..try兩者)
  • 旋轉
  • 翻譯回
+0

我認爲他們做同樣的工作不他們? – soField 2009-11-26 11:41:05

+0

是的,他們是我測試 – soField 2009-11-26 11:43:35

+0

如果他想旋轉對象的原點,他不需要做兩個翻譯,但;他只需要做那些,如果他想圍繞任意點旋轉(這仍然是很好的信息)。 – jprete 2009-11-26 12:29:29

0

當你做這樣的事情,你要記住,你是從未移動的這是繪製的東西。可以這麼說,你只是在移動油漆刷

你會做通常沿着這些路線的東西:

  1. 翻譯圖紙原點,你要畫的點。
  2. 將畫筆旋轉到您想要繪製的角度。
  3. 繪製對象。
  4. 反轉舊的轉換,以便將來的對象不受影響。

我不能,但是,請記住正確的順序做翻譯和旋轉。(任何的評論了嗎?)

1

要通過具體的原點使用

x2 = cos(angle)*(x1 - x0) -sin(angle)*(y1 - y0) + x0 

y2 = sin(angle)*(x1 - x0) + cos(angle)*(y1 - y0) + y0 
圖像旋轉

其中(x0,y0)是您想要的原點。

要做到這一點更容易只需使用矩陣符號

[x2 [cos -sin x0 [x1 - x0 
    y2 = sin cos y0 y1 - y0 
    1]  0 0 1]  1 ]