2016-11-08 182 views
-1

所以我得到了這是一個三角形,但我如何着色?我對Java很陌生,所以忍受着我。我也想稍後將它複製並粘貼在它旁邊,然後在它的頭部旋轉它。我試圖建立的圖是Kite(正如你可以看到它主要建立在traingles的不同部分)。Java - 如何填充三角形並旋轉它? (多邊形)

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    this.setBackground(Color.yellow); 

    //this is where the triangle starts 
    g.setColor(Color.RED); 
    g.drawPolygon(new int[] {40, 80, 120}, new int[] {100, 20, 100}, 3); 

在此先感謝!

+0

'fillPolygon'將用您的顏色填充形狀。 –

+0

那麼,我需要編碼?對不起,我是一個noob :( – ZanicL3

+1

'g.drawPolygon'畫了一個輪廓。'g.fillPolygon'這一行的顏色。如果你閱讀[documentation](http://docs.oracle.com/javase/8/ docs/api/java/awt/Graphics.html)你可以看到這個方法。 –

回答

1

你可以做的就是將圖形對象g轉換成一個2D的圖形對象。例如:

Graphics2D g2 = (Graphics2D) g; 

將允許您使用Graphics2D軟件包中包含的工具,您需要導入該工具。然後,可以形成三角形:

Polygon tri = new Polygon(new int[] {40, 20, 80}, new int[] {100, 20, 100}, 3); 

接下來,你需要順時針THETA度旋轉的三角形角落找尋它的中心和創建它,填充:

g2.rotate(Math.toRadians(THETA), (140/3), (220/3)); 
g2.fill(tri); 

這將創建座標指定的三角{40,20,80}和{100,20,100},旋轉THETA度。我指定了2個額外的旋轉參數的原因是因爲如果它們沒有被指定,它將圍繞(0,0)旋轉。 140/3只是x座標的平均值,而220/3是y座標的平均值。如果你很好地瞭解你的幾何體,你會認識到這是三角形的質心。如果每次旋轉量相同,則可以手動將THETA轉換爲弧度。但是,還有另一種方法可以做到這一點。您可以圍繞三角形的質心旋轉每個點,然後繪製由這些點定義的多邊形。要做到這一點,從一般旋轉矩陣中推導出一個公式是最容易的。因爲這是堆棧溢出,所以我不能很容易地向您展示沒有LaTex支持的公式的派生。最後,點(x, y)可以圍繞三角形(xc, yc)的中心旋轉THETA度。使用公式rX = ((x - xc) * cos(THETA)) - ((y - yc) * sin(THETA) + xc獲取旋轉點的x座標,並使用rY = ((x - xc) * sin(THETA)) + ((y - yc) * cos(THETA)) + yc。我相信你可以適應這個Java,但如果你需要幫助,告訴我。請記住,Math.cos()Math.sin()以弧度表示參數,而不是度數。因爲Math.toRadians()將不會返回確切的值,所以提供給Math.cos()Math.sin()的大多數值將評估爲0.