728x90
반응형
자료구조수업에서 시에르핀스키 삼각형에 대한 과제가 있어서 한번 코딩을 해보았습니다.
시에르핀스키 삼각형(Sierpinski triangle)은 프랙탈 도형입니다.
시에르핀스키 삼각형은 다음과 같은 방법을 통해 얻을 수 있다.
- 정삼각형 하나에서 시작한다.
- 정삼각형의 세 변의 중점을 이으면 원래의 정삼각형 안에 작은 정삼각형이 만들어진다. 이 작은 정삼각형을 제거한다.
- 남은 정삼각형들에 대해서도 2.를 실행한다.
- 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 |
728x90
반응형
'자료구조' 카테고리의 다른 글
#9 자료구조 <Stack> 파이썬 (0) | 2020.05.05 |
---|---|
[파이썬 자료구조] 이중연결리스트(Doubly Linked Lists) (0) | 2020.05.05 |
[파이썬 자료구조] 하노이탑 (0) | 2020.05.05 |
[파이썬 자료구조] 단일연결리스트(Singly Linked List) 설명 및 코드 (0) | 2020.05.05 |
[파이썬 자료구조] List (0) | 2020.05.05 |