2013-12-13 296 views
-2

所以我寫了一個編譯的程序,但它不會做我想做的事情。它應該填充三角形而不使用填充多邊形。我試圖將代碼限制爲循環。填充沒有填充多邊形的三角形?

重點是讓三條線越來越小,以填充三角形的每個部分。 解決這個問題的方法是,我認爲應該找出循環應該停止的地方。我猜測了三角形的一半高度(140)。

import javax.swing.*; 
import java.awt.*; 

public class Tri extends JApplet 
    { 

     int x1=0; 
     int y1 = 140; 
     int x2 = 120; 
     int y2 = 140; 
     int x3 = 60; 
     int y3; 


       public void paint (Graphics page) 
       { 
        for (y3= 0; y3<=70; y3++) 
        { 
        page.drawLine (x1, y1, x2, y2); 
        page.drawLine (x2, y2, x3, y3); 
        page.drawLine (x3, y3, x1, y1); 


        y1++; 
        x2--; 
        y2--; 
        x1++; 
        } 


       } 

    } 
+0

1)請不要忘記添加'?'提問!有些人在頁面中搜索'?'如果'問題'中不存在,則直接進入下一個(實際)問題。 2)爲什麼編寫一個小程序?如果這是由於規格。由老師,請參考[爲什麼CS老師應該停止教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)。 –

+0

這不是填充形狀的方法。實現*** [洪水填充算法](http://en.wikipedia.org/wiki/Flood_fill)*** –

+0

不要在繪畫方法中調用repaint()。這將導致無限循環。 – camickr

回答

1

改變你的循環邏輯,試試下面的代碼

int x1=0; 
    int y1 = 140; 
    int x2 = 120; 
    int y2 = 140; 
    int x3 = 60; 
    int y3=0; 


      public void paint (Graphics page) 
      { 
       page.drawLine (x1, y1, x2, y2); 
       page.drawLine (x2, y2, x3, y3); 
       page.drawLine (x3, y3, x1, y1); 

       for (x1= 0; x1<=120; x1++)  

      { 

       page.drawLine (x3, y3, x1, y1); 


      } } 

保持兩行恆定,通過改變其座標

信息有關油漆改變其他線的位置()和重繪請點擊鏈接

paint() and repaint() in Java `

+0

你是說我應該反覆畫一條線嗎? – munchschair

+1

是的,首先如果你繪製座標(0,140)(60,0),你用(1,140)(60,0)繪製等等,直到它到達下一行,即(120,140)(60,0) – wudpecker

+0

謝謝你油漆重漆鏈接。這個網站非常有幫助。 – munchschair