Java内部的几何图形

时间:2013-10-16 02:47:51

标签: java windows forms object ascii

好的,所以我正在尝试为作业绘制一个几何图形,我完成了95%。我唯一的问题是,无论我多么努力“平滑”它,我仍然得到一些不起作用的东西。 (我试过添加.5)。我想重新创建的数字是椭圆形的。 主方法使用四个整数:x = 14,y = 8,radiusA = 5,radiusB = 1

输出应该是什么样的。

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.

2 个答案:

答案 0 :(得分:0)

你正在进行整数除法。在每次除法之前尝试将(j-x)(i-y)投射到double,否则每个除法的结果将四舍五入到下面的整数。

答案 1 :(得分:0)

你遇到的两个问题是:

  • 你应该使用double代替int,如上面提到的David
  • 您使用公式的分辨率很小,只能看到省略号

尝试使用x = 27,y = 7,radiusA = 25,radiusB = 5并查看结果。改为double将提高精度。

以下是使用上述值修改的代码版本(使用java Test 25 5运行):

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();
    }
  }
}

请注意,在代码中我使用半径值来计算x和y,因此它更好地缩放而不是硬编码i<=20j<=20