자료구조

#7 자료구조 <Sierpinski Triangles recursively> 파이썬

j9m 2020. 5. 5. 17:57
반응형

자료구조수업에서 시에르핀스키 삼각형에 대한 과제가 있어서 한번 코딩을 해보았습니다.

시에르핀스키 삼각형(Sierpinski triangle)은 프랙탈 도형입니다.

시에르핀스키 삼각형은 다음과 같은 방법을 통해 얻을 수 있다.

  1. 정삼각형 하나에서 시작한다.
  2. 정삼각형의 세 변의 중점을 이으면 원래의 정삼각형 안에 작은 정삼각형이 만들어진다. 이 작은 정삼각형을 제거한다.
  3. 남은 정삼각형들에 대해서도 2.를 실행한다.
  4. 3.을 무한히 반복한다.

이것을 반복하면 다음과 같은 도형이 얻어진다.(무한반복)

아래는 Sierpinski Triangles recursively arrow에대한 코드입니다.

Sierpinski Triangles을 recursively하게 tuple을 사용해서 그려보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import turtle
 
def sierpinski_triangles(length, depth, angle, my_turtle):
 
    if depth == 0: #depth가 0일떄 앞으로 갑니다
        my_turtle.forward(length)
    else:
        sierpinski_triangles(length / 2, depth - 1-angle, my_turtle)
        my_turtle.right(angle)
        sierpinski_triangles(length / 2, depth - 1, angle, my_turtle)
        my_turtle.right(angle)
        sierpinski_triangles(length / 2, depth - 1-angle, my_turtle)
 
if __name__ == "__main__":
    my_turtle = turtle.Turtle()
    my_turtle.shape("turtle")
    my_win = turtle.Screen()
    my_win.setup(startx=500, starty=50# 화면상 위치
    my_turtle.speed(1000) #그리는 속도입니다.
    my_turtle.setheading(0)  # draw triangle counter-clockwise
    my_turtle.pensize(1) #펜 사이즈설정
   my_turtle.penup() #펜을 들어서
    my_turtle.goto(-250-250) # (-250,-250)위치로 갑니다
   my_turtle.pendown() #펜을 듭니다
    depth = 8  #depth 수정은 여기서. depth가 클수록 복잡해집니다.
    if depth %2 ==1: #depth가 홀수 일때와 짝수일때 나눠서 코드를 짰습니다.
        my_turtle.left(60) #왼쪽으로 60도 회전하라
    sierpinski_triangles(500, depth, 60, my_turtle)
   my_turtle.penup()
    my_win.exitonclick()
cs

 

 

반응형