21
Doing Math with Python Ch.06 기기기기 기기기 기기기 기기기 윤윤윤 ([email protected])

Doing math with python.ch06

Embed Size (px)

Citation preview

Page 1: Doing math with python.ch06

Doing Math with PythonCh.06 기하학적 형상과 프랙탈 그리기

윤석준 ([email protected])

Page 2: Doing math with python.ch06

파이썬으로 풀어보는 수학

상세설명https://github.com/DevStarSJ/Study/blob/master/Blog/Python/DoingMathWithPython/DoingMathWithPython.Ch06.ipynb

• 원서명 : Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More! (ISBN 9781593276409)

• 지은이 : 아미트 사하 (Amit Saha)• 원서 및 관련자료 : https://www.nostarch.com/doingmathwithpython• 번역서 : http://www.acornpub.co.kr/book/doing-math-with-python

Page 3: Doing math with python.ch06

3

1. matplotlib 의 패치 (patch) figure 객체 얻어오기

- .figure() : 생성

- .gcf() : 현재 figure 객체

axes 객체 얻어오기

- .axes() : 생성

- .gca() : 현재 axes 객체

Page 4: Doing math with python.ch06

4

1. matplotlib 의 패치 (patch) 원 그리기

사각형 그리기

Page 5: Doing math with python.ch06

5

2. 움직이는 그림 (animation)

Page 6: Doing math with python.ch06

6

2. 움직이는 그림 (animation)• fig : 현 그림의 객체

• update_radius : 프레임 번호와 프레임마다 갱신하기를 바라는 패치 객체가 전달되어서

원하는 모양으로 변경한 뒤 패치 객체를 리턴

• fargs : update_radius() 에게 전달되는 인자들의 목록 ( 프레임 번호는 제외 )

• frames : 애니메이션의 프레임 개수 . 여기에 적힌 수 만큼 update_radius() 를 호출하게 됨

• interval : 프레임 간의 시간 간격 ( 밀리미터 단위 )

• repeat : True, False  값을 가질 수 있으며 애니메이션의 반복 유무를 결정 . (default 는 True)

Page 7: Doing math with python.ch06

7

3. 투사체의 포물선 애니메이션

전체 소스는 상세설명 링크 참조

Page 8: Doing math with python.ch06

8

4. 프랙탈 (fractal) 그리기

단순한 구조가 끊임없이 반복되면서 복잡하고 묘한 전체 구조를 만드는 것으로 , 즉 자기유사성 (self-simi-larity) 와 순환성 (recursiveness) 라는 특징을 가지고 있다 . – 우리 생활 속 프랙탈 by 박희훈 ((https://prezi.com/gffdwoyxj7qd/presentation)

Page 9: Doing math with python.ch06

9

4. 프랙탈 (fractal) 그리기 평면상 점 변환 ( 단순한 프랙탈 예제 )

P(x, y) -> Q(x+1, y+1)

Page 10: Doing math with python.ch06

10

4. 프랙탈 (fractal) 그리기 2 개의 룰 중 랜덤

P(x, y) -> Q(x+1, y+1) or Q(x+1, y-1)

Page 11: Doing math with python.ch06

11

4. 프랙탈 (fractal) 그리기 random.choice() : 입력된 리스트 중 동일한 확률로 랜덤으로 선택

P(x, y) -> Q(x+1, y+1) or Q(x+1, y-1)

Page 12: Doing math with python.ch06

12

4. 프랙탈 (fractal) 그리기 반즐리 (Michael Barnsley) 의 고사리

Page 13: Doing math with python.ch06

13

5. 이미지 출력5x5 영역에 0 ~ 10 의 색분포를 랜덤으로 색칠하는 프로그램 작성

( 각각의 점의 색은 검은색을 0 흰색을 10 으로 하여 그 사이 값을 가

짐 ) 2 차원 List 생성하는 함수

Page 14: Doing math with python.ch06

14

5. 이미지 출력 imshow() 함수를 이용하여 이미지 출력

Page 15: Doing math with python.ch06

15

5. 이미지 출력 imshow() 주요 인자

- origin : lower 인 경우 list2D[0][0] 값이 이미지 상 (0,0) 으로 매칭

- extent : 이미지 좌측하단을 (0,0), 우측상단을 (5,5) 로 설정

- cmap=cm.Greys_r : 회색스케일의 이미지를 생성

- interpolation=‘nearest’ : 가장 인접한 점과는 같은 색으로 그리지 않도록

설정

Page 16: Doing math with python.ch06

프로그래밍 연습문제필자가 풀이한 답은 다음 Link 를 참고하세요 .https://github.com/DevStarSJ/Study/blob/master/Blog/Python/DoingMathWithPython/DoingMathWithPython.Ch06.ipynb저자의 정답은 다음 Link 에 있습니다 .https://www.nostarch.com/doingmathwithpython

Page 17: Doing math with python.ch06

17

1. 사각형 내에 원을 포함시키기1. 먼저 큰 사각형을 하나 그린 다음

2. 사각형 내에 반지름 0.5 인 원을 채워 넣으세요 .

Page 18: Doing math with python.ch06

18

2. 시어핀스키의 삼각형폴란드 수학자 바츌라프 시어핀스키 (Waclaw Sierpinski) 의 정삼각형 프렉탈을 그리세요 .( 모든 확률은 1/3 으로 동일합니다 .)

Page 19: Doing math with python.ch06

19

3. 헤논 함수 탐색1976 년 마이클 헤논 (Michael Henon) 함수를 애니메이션으로 작성하세요 .

Page 20: Doing math with python.ch06

20

4. 만델브로트 집합 그리기 (-2.5, -1.0) ~ (1.0, 1.0) 공간에 각 축을 400x400 의 공간으로 나눈 곳에 점을 찍습니다 .

1. 2 개의 복소수를 생성

z1 = 0 + 0j c = xi + ykj2. 레이블 iteration 을 생성하여 0 으로 설정

3. 복소수 z1 = z1^2 + c4. iteration 값을 1 증가

5. abs(z1) < 2 이며 iteration < max_iteration 이면 3 단계로 이동 , 그렇지 않으면 6 단계로 이동

(max_iteration 을 1,000 으로 설정 , 더 커질수록 복잡한 이미지가 생성되나 계산 시간이 길어짐 )6. 점 (xi, yk) 의 색상을 iteration 으로 설정

Page 21: Doing math with python.ch06

Thanks