오늘의 목표
1. 프렉탈 알아보기
2. turtle모듈 사용해보기
3. turtle모듈로 시에르핀스키 삼각형 그리기
1. 프렉탈(fractal)이란?
프렉탈이란 자기 유사성(self-similar)을 갖는 그림이고 순환성(recusive)을 갖는 그림이다.
만델브로트가 1967년에 사이언스지에 '영국 해안선의 길이는 얼마인가?'를 발표하면서 프렉탈이라는 용어가 굳혀졌다.
1975년에 만델브로는 "프랙탈"이라는 단어로 수백년에 걸친 사고와 수학적 발전을 굳히고, 인상적인 컴퓨터 건축 시각화로 그의 수학적 정의를 묘사했다. - 출처 위키피디아 -
만델브로트는 IBM의 석좌 사이언티스트로 일했으며 그래픽 관련 일을 했었는데 영국 해안선 길이는 왜 궁금했을까..ㅎㅎ
2. 시에르핀스키 삼각형
시에르핀스키(시어핀스키)
정삼각형의 세변의 중점을 이어 삼각형을 만들고, 이 과정을 무한히 반복하여 만든 프렉탈 모양
남아있는 면적은? 길이는?
처음 삼각형의 면적 = S
두 번째 단계 = 3/4 * S
세 번째 단계 = 3/4 * 3/4 * S
쭉 하다보면 결국에는 0으로 수렴한다.
처음 삼각형의 둘레 = 3 * L
두 번째 단계 = 3 * 1/2 * L * 3
세 번째 단계 =
쭉 하다보면 결국에는 무한대가 된다.
3. 파이썬 turtle모듈 사용하기
파이썬에서 turtle 모듈을 사용하려면 turtle모듈을 import 해주어야 한다!
먼저 repl.it 사이트에서 기본 turtle모듈을 사용해보자!
import turtle as t
def box(x,y,color):
t.color(color)
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
box(100,50,'red')
네모에 색깔도 채워보았다.
사람도 만들어보았다.
출처 : opentutorials.org/module/2980/17298
import turtle as t
def box(pos_x,pos_y,x,y,color):
t.penup()
t.goto(pos_x - x/2,pos_y - y/2)
t.speed('normal')
t.color(color)
t.begin_fill()
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.end_fill()
#foot
box(-50,-150,80,50,'blue')
box( 50,-150,80,50,'blue')
#leg
box(-50,-80,20,100,'red')
box( 50,-80,20,100,'red')
#body
box(0,50,150,150,'yellow')
#arm
box(120,70,80,20,'green')
box(-120,70,80,20,'green')
#head
box(0,160,80,70,'pink')
#eye
box(10,170,10,10,'black')
box(-10,170,10,10,'black')
#mouth
box(0,150,30,10,'black')
t.hideturtle() #커서감추기
input("")
이번에는 꽃 모양을 그려보자
import turtle
myturtle = turtle.Turtle()
myturtle.color('red', 'yellow')
myturtle.begin_fill()
myturtle.speed('fast')
while True:
myturtle.forward(300)
myturtle.left(110)
if abs(myturtle.pos()) < 1:
break
myturtle.end_fill()
turtle.done()
4. 파이썬 turtle모듈로 시에르 삼각형 그리기
아래의 코드대로 쓰면 어떻게 될까?
출처 : m.blog.naver.com/gitae1203/221618872452
import turtle as t
def tri(tri_len):
if tri_len <= 10:
for i in range(0,3):
t.forward(tri_len)
t.left(120)
return
new_len=tri_len/2
tri(new_len)
t.forward(new_len)
tri(new_len)
t.backward(new_len)
t.left(60)
t.forward(new_len)
t.right(60)
tri(new_len)
t.left(60)
t.backward(new_len)
t.right(60)
t.speed(5)
tri(100) #함수 호출
t.hideturtle()
t.done()
오늘의 목표 달성 끝~!
turtle 모듈을 활용하여 프렉탈을 만드는 함수를 써보았다~!
어렵다...ㅠㅠ
'프로그래밍 > 파이썬기초' 카테고리의 다른 글
구글 코랩(colab) 기초 사용법 (0) | 2023.09.21 |
---|---|
팔린드롬(palindrome) for반복문이용_파이썬 기초 (0) | 2022.08.31 |
소수 판별(emirp소수, 쌍둥이소수, 6촌 소수)_파이썬 기초 (0) | 2021.03.31 |
함수만들기 : sum, total_파이썬 기초 (0) | 2021.03.29 |
배수와 공배수 구하기_파이썬 기초 (0) | 2021.03.26 |