2013-10-16 5 views
0

좋아, 그래서 과제물의 기하학적 인 도형을 그리려고하고 있는데, 나는 95 % 완료되었습니다. 내 유일한 문제는, 아무리 "부드럽게"하려고해도, 나는 여전히 효과가없는 것을 얻는다는 것입니다. (나는 .5를 추가하려고 시도했다.). 재현하려는 인물은 타원입니다. main 메소드는 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(); 
    } 
} 

Required output

는 지금이 내가 이전에 보여 주었다 이전 방법에서 무엇을 얻을 수 있습니다.

My output.

+0

죄송합니다. 궁금하신 점이 있습니까? 중첩 된 for 루프는 내 x 및 y 위치를 검색하는 루프입니다. if 문 안쪽의 수식은 "#"가 필요한 부분을 결정합니다. –

+0

오, 글쎄, 난 질문에 썼지 만 여기에 : x = 14, y = 8, radiusA = 5, radiusB = 1 –

답변

0

당신은 그 중간에 정수 나누기를하고 있습니다. 각 나누기 전에 (j-x)(i-y)double으로 캐스팅 해보세요. 그렇지 않으면 각 나누기 결과가 아래 정수로 반올림됩니다.

+0

나는 그것을 시도하고 같은 결과를 얻는다. 시도해 줘서 고마워. –

+0

다른 버그가 있더라도 어쨌든이 작업을 수행해야합니다. 캐스트 없이는 전혀 작동하지 않습니다. –

+0

좋아요, 그럼 코드를 내 코드 안에 보관할 것입니다. 감사! –

0

두 가지 문제는 당신은 한 :

  • 당신은 당신이 당신의 공식을 사용하는
  • 해상도 이상을 언급 데이비드로 INT의 두 배 대신 사용해야 두 줄임표
에게보고 작은

x = 27, y = 7, radiusA = 25, radiusB = 5를 사용하여 결과를보십시오. 두 배로 변경하면 정밀도가 향상됩니다. 내가 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를 사용하여 실행) -coded i<=20, j<=20

+0

나는 프로그램을 시험해 보았다. 하지만 문제는 할당의 일부가 값을 하드 코딩해야한다는 것입니다. –