2009-11-21 4 views
1

위키 피 디아 페이지에서 이것을보고 있었고 누구나이 작업을 구현하고 있는지 궁금해하고있었습니다.Koch Snowflake Implementation in Haskell

나는 하스켈을 배우려고 노력 중이며 약간 어려워서 코흐 눈송이와 시어 핀 스키 삼각 지대에서 일하고있다.

모든 코드 또는 제안을 환영합니다.

감사

+0

sierpinski의 삼각형에 대해서는 여기를 참조하십시오. [http://stackoverflow.com/questions/1726698/code-golf-sierpinskis-triangle](http://stackoverflow.com/questions/1726698/code-golf- sierpinskis-triangle) 도움이되는 정보 : [http://www.hardforum.com/showthread.php?p=1034927217] (http://www.hardforum.com/showthread.php?p=1034927217) 다음은 도움이 될 수있는 제안입니다. [http://www.rhinocerus.net/forum/lang-functional/96046-haskell-fractals-specifically-snowflakes.html](http://www.rhinocerus.net /forum/lang-functional/96046-haskell-fractals-specifically-snowflakes.html) –

답변

1
  1. 비행기를 중심으로 삼각형의 점을 계산합니다.
  2. 삼각형의 각 점에서 삼각형의 크기를 삼분의 일 크기로 계산하고 다른 방법은 위로 (수평 중앙을 따라 뒤집음) 계산합니다.
  3. 각 삼각형을 2 단계로 전달하고 그 결과를 2 단계로 다시 전달하는 식으로 계속합니다.
  4. 거꾸로 뒤집습니다.

삼각형 목록을 제공해야합니다. 지금이 삼각형을 당신이 생각하는 깊이로 화면에 그리십시오.

4

구조가 많고 규모에 영향을받지 않는 이런 종류의 그림의 경우 다이어그램 패키지 (http://projects.haskell.org/diagrams/)를 사용하는 것이 좋습니다. 정말 환상적인 코드입니다. 다음 코드를 참조하여 작성한 Koch 눈송이를 작성하십시오. 진정 분 만에 :

snowflake :: Int -> Trail R2 
snowflake n = k <> k # rotateBy (-1/3) <> k # rotateBy (1/3) 
    where k = koch n 

koch :: Int -> Trail R2 
koch 0 = P (-1,0) ~~ P (1,0) 
koch n = k <> k # rotateBy (1/6) <> k # rotateBy (-1/6) <> k 
    where k = koch (n-1) # scale (1/3) 

거의 자기 설명이다, 마법의 대부분은 산책로가 종료 종료 "연결할"합니다 트레일의 모노 이드 인스턴스입니다.

주 : (<>)은 mappend에 대한 연산자이며 과거에 정의한 다이어그램이지만 GHC 7.4의 기본 부분이며 아마도 Haskell 보고서의 차후 버전에 포함될 것입니다 (#) 다이어그램 작성자가 다이어그램을 정의한 다음 다른 방향으로 쓰기보다는 속성을 적용하는 것이 더 즐거워서 (k # rotateBy (1/6)은 단지 rotateBy (1/6) k)이기 때문에 응용 프로그램이 반전되었습니다.