2012-07-18 212 views
1

當我嘗試將旋轉應用於當前的g2d對象時,它不旋轉它,它將它呈現在相同的地方(在我的上下文中)。根據我對旋轉方法的理解,它將變換應用到當前的圖形上下文中,轉換任何渲染後的像素(這可能是我出錯的地方)。這裏是有問題的代碼:Java旋轉問題

@Override 
    public void paint(final Graphics graphics) { 
    super.paint(graphics); 
    final Graphics2D g2d = (Graphics2D) graphics; 
    .... 
    .... 
    g2d.setColor(Color.RED); 
    g2d.setStroke(new BasicStroke(SMALL_LINE_THICKNESS)); 
    if (isLattice1Drawn) { 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1)); 
     // lattice1 and lattice2 are Polygon objects 
     g2d.draw(lattice1); 
     // This fades in the second Polygon over the first 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); 
     // This line should rotate it, but doesn't 
     g2d.rotate(Math.toRadians(210)); 
     g2d.draw(lattice2); 
     ..... 

謝謝,邁克

編輯1 作爲傑夫的建議,我試過只具有旋轉和油漆繪畫,讓我用下面的代碼:

@Override 
public void paint(final Graphics graphics) { 
    super.paint(graphics); 
    final Graphics2D g2d = (Graphics2D) graphics; 
    g2d.rotate(Math.toRadians(210)); 
    g2d.draw(lattice2); 
    return; 
    // Rest of paint ................. 

不幸的是,這並沒有幫助,任何其他建議將是最受歡迎的。

編輯2: 當我不調用旋轉時,多邊形被渲染,但是當我什麼都不做時會發生。任何人都可以解釋嗎?

+0

我相信你是對旋轉後轉化像素正確。什麼是格子?那是你創造的東西嗎? – jeff 2012-07-18 16:16:50

+0

@jeff lattice1和lattice2是java.awt.Polygon的實例,沒有什麼特別的:) – mikeythemissile 2012-07-18 16:19:11

+0

我很茫然 - 如果你把lattice2放到一個paint方法本身只有旋轉會怎樣? – jeff 2012-07-18 17:02:22

回答

3

我從得知的編輯2是:旋轉實際上起作用。但是,由於旋轉在原點附近,因此多邊形的旋轉座標會在可見區域外結束。你可以通過旋轉較小的度數來測試它。

然後,如果所需的操作是繞其質心的多邊形,請使用以下的Graphics2D方法代替:

void rotate(double theta, double x, double y) 
+0

我認爲這就是發生這種情況。你可以像我之前評論中所說的那樣翻譯出處,但我認爲vizier所說的旋轉版更好。我忘了它:S – davidbuzatto 2012-07-18 17:27:44

+0

這就是發生了什麼,不能相信我沒有那樣的:S 非常感謝大家的幫助:D – mikeythemissile 2012-07-18 17:42:16