0

わかりましたので、課題のために幾何学図形を描こうとしていますが、95% 完了しました。私の唯一の問題は、どれだけ「滑らかに」しようとしても、うまくいかないことです。(私は.5を追加しようとしました)。私が再現しようとしている図形は楕円形です。メイン メソッドは 4 つの整数を使用します: 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

あなたが持っている2つの問題は次のとおりです。

  • Davidが上で述べたように、intの代わりにdoubleを使用する必要があります
  • 数式で使用している解像度は、省略記号を表示するために 2 つ小さいです

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 に答える