2012-01-18 2 views
3

이 koch 눈송이 그리기를 재귀 적으로 수행 할 수 없습니다.재귀 적으로 그리기

어떤 도움을 주시면 감사하겠습니다

public void koch(int n, double size) { 
    if (n == 0) { 
     t.forward(size); 
    } else { 

     koch(n - 1, size/3); // line 1 
     stdTort.rotate(60);   // line 2 
     koch(n - 1, size/3);  // line 3 
     stdTort.rotate(120);   // line 4 
     koch(n - 1, size/3);  // line 5 
     stdTort.rotate(60);   // line 6 
     koch(n - 1, size/3);  // line 7 
    } 
} 

재귀 방법.

+0

는 그것은 VB (Visual Basic의 경우) 언어 태그의 5 개 이상 –

+0

를 추가 기운 다. 분명히 네 가지 프로그래밍 언어로 무작위로이 질문에 태그를 붙였습니다. 분명히 하나만 사용할 때입니다. –

+0

글쎄, 이것은 알고리즘 문제이므로, 모든 언어가 올바르게 해석 할 수 있어야합니까? –

답변

1

각도가 반 시계 방향으로 갈 것으로 예상되는 곳에서 시계 방향으로 회전하기 때문에 모든 각도가 잘못되었습니다. 그림 2의 각도를 얻기 위하여 당신이 실제로 그런 다음이에 대한 생각은 -60을 회전 할 최종 라인,하지 (60)

koch(n - 1, size/3); // line 1 
    t.rotate(120);   // line 2 
    koch(n - 1, size/3);  // line 3 
    t.rotate(120);   // line 4 
    koch(n - 1, size/3);  // line 5 
    t.rotate(-60);   // line 6 
    koch(n - 1, size/3);  // line 7 

를 얻을 수 (120),하지 (60)를 회전 할 필요가, 나는 생각 회전이 직관적이지 않기 때문에 혼란스러워하는 이유가 있습니다. 거북이가 첫 번째 줄을 앞으로 나아가고 있다면 거북이가 그 방향에서 시계 방향 또는 반 시계 방향 일 것으로 예상합니다. 그러나 그것은 당신의 교체가 모두 반대 방향에서 시작하는 것처럼 보입니다.

은 예상 :

 /
-60 = -- 

+60 = -- 
     \ 

실제 :

-60 = -- 
    /

     \ 
+60 = -- 
+0

2 행을 "-120"으로 변경하면 그림 2가 나오지만 그림 3은 여전히 ​​해결되지 않습니다. 그림 4와 같이 선을 4로 유지하면 그림 3과 같이 기울기가 생기지 않고 곧게됩니다. –

+0

@ jonny [Math.sin()] (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#sin)에 전달하기 전에도를 라디안으로 변환하고 있습니까? (더블))? –

+0

@jonny 방향과 함께 시작하는 값은 무엇이며 회전 방법을 보여줄 수 있습니까? – DaveJohnston

0

반 시계 방향으로 회전하려면 t.rotate (-120);

관련 문제