2013-12-19 223 views
1

我目前正在嘗試爲圓形實現繪製方法,但是我的唯一工具是從多個點繪製線條(特定於此示例,我有一個「筆」,可以移動到,然後從該位置畫到新位置上的網格。)在java中使用線繪製圓形

這是我當前的代碼

public void draw(WinPlotter plotter){ 
     setPenColor(plotter); 
     plotter.moveTo(xo,yo); //xo,yo being original X and Y cords (origin) 
     for (int i = 0; i > 360; i++){ 
      double x = Math.sin(i) * radius; 
      double y = Math.cos(i) * radius; 

      plotter.drawTo(x,y); 
     } 
    } 

我不知道我錯過了什麼,但其實這不會輸出任何東西總之,我已經測試過確保xo和yo被正確地傳遞給方法,所以我相信我的問題在於我試圖從線條畫出一個圓的邏輯。

編輯:

public void draw(WinPlotter plotter){ 
     setPenColor(plotter); 
     plotter.moveTo(xo,yo+radius); 
     for (int i = 0; i <= 360; i++){ 
      double x = xo+ Math.sin(i * (Math.PI/180)) * radius; 
      double y = yo+ Math.cos(i) * radius; 

      plotter.drawTo(x,y); 
     } 
    } 

這是我固定的代碼。仍然沒有建立社交圈,而不是創建這個(圓圈應該是在頂部)

enter image description here

回答

4

問題1:弧度sin()cos()期待的投入,而不是度。要獲得弧度,請將i乘以Math.PI/180

問題2:你的循環中的條件是落後的;你想要i < 360,而不是i > 360。如果您想關閉該圈子,請改用i <= 360

問題3:您不會將xoyo添加到計算出的x/y座標中,因此您正在繪製除(0,0)原點上的第一個點之外的所有圓。

問題4:您的初始moveTo()將轉到圓的中心,而不是0度圓上的點。

+0

我試過這個,並用更新編輯了我原來的問題。你能看看嗎? – user3120910

+0

@ user3120910您修正了'sin()'調用,但不修改'cos()'調用;你將弧度投給一個和另一個度。 – TypeIA

+0

好吧,這是我愚蠢的哈哈謝謝。我想我對整個方法感到很慌亂,所以我並沒有批判性地思考。再次感謝 – user3120910