2013-10-16 22 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

我试过这个程序,它超出了界限。但事情是,部分任务需要我对值进行硬编码。 –