0

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

这是输出的样子。

所需输出

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

现在这就是我从之前展示的上一个方法中得到的。

我的输出。

4

2 回答 2

0

您正在中间进行整数除法。尝试在每次除法之前强制转换(j-x)(i-y)double,否则每次除法的结果将四舍五入到下面的整数。

于 2013-10-16T02:56:15.143 回答
0

您遇到的两个问题是:

  • 正如上面大卫提到的,你应该使用 double 而不是 int
  • 您与公式一起使用的分辨率是两个小看省略号

尝试使用 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

于 2013-10-16T03:35:18.817 回答