2013-10-16 24 views
0

好了,所以我想繪製一個任務的幾何圖形,我95%完成。我唯一的問題是,無論我試圖「平滑」它,我仍然得到一些不起作用的東西。 (我試過添加.5)。我試圖重新創建的圖是橢圓形的。 主要方法使用四個整數:x = 14,y = 8,radiusA = 5,radiusB = 1Java內部的幾何圖形

以下是輸出的樣子。

Required output

public static void DrawingFigures(int x, int y, int radiusA, int radiusB) { 
    for (int i = 0; i <= 20; i++) { 
    for (int j = 0; j <= 20; j++) { 
     double dx = Math.pow(((j - x)/radiusA), 2); 
     double dy = Math.pow(((i - y)/radiusB), 2); 
     if (dx + dy == 1 && dx + dy == 1) { 
     System.out.print("#"); 
     } else { 
     System.out.print(" "); 
     } 
    } 
    System.out.println(); 
    } 
} 

現在,這是我從我先前的研究顯示以前的方法得到。

My output.

+0

對不起,我不確定要理解你的問題?嵌套for循環是掃描我的x和y的位置。 if語句中的公式決定了我想要「#」的位置。 –

+0

哦,我在問題中寫下了它,但這裏是:x = 14,y = 8,radiusA = 5,radiusB = 1 –

回答

0

你做在中間的那個整數除法。在每次除法之前,嘗試將(j-x)(i-y)改爲double,否則每個除法的結果將舍入爲以下整數。

+0

我試過了,得到的結果相同。感謝您的嘗試。 –

+0

那麼,即使還有另一個bug,無論如何你都需要這樣做。如果沒有演員陣容,它將無法工作。 –

+0

好的,我會在演員代碼中保存演員。謝謝! –

0

這兩個問題你已經是:

  • 你應該加倍,而不是使用int的大衛提到上述
  • 分辨率您使用的公式是兩個小看到省略號

嘗試使用x = 27,y = 7,radiusA = 25,radiusB = 5並查看結果。改爲double將提高精度。在我使用的半徑值來計算x和y的代碼

public class Test { 

    public static void main(String[] arg) { 
    Test.DrawingFigures(Double.parseDouble(arg[0]), Double.parseDouble(arg[1])); 
    } 

    public static void DrawingFigures(double radiusA, 
      double radiusB) { 
    DrawingFigures(radiusA, radiusB, radiusA, radiusB); 
    } 

    public static void DrawingFigures(double x, double y, double radiusA, 
      double radiusB) { 
    for (double i = 0; i <= 2 * radiusB; i++) { 
     for (double j = 0; j <= 2 * radiusA; j++) { 
     if (Math.pow(((j - x)/radiusA), 2) + Math.pow(
       ((i - y)/radiusB), 2) == 1.0d) { 
      System.out.print("#"); 
     } else { 
      System.out.print(" "); 
     } 
     } 
     System.out.println(); 
    } 
    } 
} 

注意,因此能更好地伸縮,而不是硬:

下面是使用上述值代碼的修改版本(運行使用java Test 25 5)編碼i<=20j<=20

+0

我試過這個程序,它超出了界限。但事情是,部分任務需要我對值進行硬編碼。 –