14장. turtle로 그림 그리기 turtle 객체
14.1. turtle class
turtle 이란?
2
14.1. turtle class
▪ turtle이란 앞서 배웠던 python이 제공하는 클래스 중 하나이다.
▪ 거북이의 모양을 가진 객체를 생성하여 선을 그려 디자인을 만들어 내는 것이 가능한 시각적인 도구
▪ ‘import turtle’을 함으로써 turtle 모듈을 사용
turtle이 제공하는 메소드
3
14.1. turtle class
▪ 위의 표와 같이 작성하면 다음과 같은 화면이 생성된다. 이 화살표를 이동시키면서 선을 그려 도 형을 만들 수 있다.
>>> import turtle
>>> turtlee = turtle.Turtle()
# turtle모듈을 import함으로써 turtle이 제공하는 메소드를 사용할 수 있다.
# 새로 만들어지는 turtle 객체의 이름은 ‘turtlee’로 지정한다.
4
기준 좌표
x축 y축
(0,0)
원점
5
turtle0.py 라고 저장하고 실행하면 atom 에디터에서 실행창이 뜨고나서 바로 사라진다
-> 터틀 그래픽을 화면에 그린 후 실행을 마쳤으므로 곧바로 화면이 종료된다
turtle.done() 함수는 turtle 그래픽 화면을 붙잡아두는 역할을 한다
-> myturtle.done() 이 아니다!!!( turtle.done() 으로 해야함 )
-> 화면은 닫기 버턴을 클릭해서 닫는다
14장. turtle로 그림 그리기 turtle 객체
14.2. turtle 클래스가 제공하는 메소드
7
14.2. turtle 클래스가 제공하는 메소드
▪ turtle이 제공하는 메소드를 써보기 위해 다음과 같이 ‘myTurtle’라는 객체를 선언한다.
▪ turtle에서는 turtle의 모양 및 크기, 색을 지정하고, turtle의 움직이 는 방향이나 거리를 정하여 선을 그리게 하는 등 여러 가지 메소드 를 제공한다.
>>> myTurtle = turtle.Turtle()
앞뒤로 움직이기
8
14.2. turtle 클래스가 제공하는 메소드
9
turtle 객체의 모양 지정하기
10
14.2. turtle 클래스가 제공하는 메소드
▪ turtle의 모양은 여러 가지로 지정할 수 있다.
[예제]
turtle의 객체.shape(‘shape이름‘) turtle의 모양을 지정한 모양으로 변경
종류) arrow, turtle, circle, square, triangle, classic
11
turtle 객체의 색이나 크기 지정하기 (1/2)
12
14.2. turtle 클래스가 제공하는 메소드
▪ 색이나 크기도 지정하는 대로 다음과 같은 메소드를 통해 바꿀 수 있다.
[예제]
Turtle의 객체.shapesize(w, h, b) turtle의 크기를 원하는 세로 w, 가로 h, 윤곽선 b배로 변경
turtle 객체의 색이나 크기 지정하기 (2/2)
13
14.2. turtle 클래스가 제공하는 메소드
▪ 색이나 크기도 지정하는 대로 다음과 같은 메소드를 통해 바꿀 수 있다.
[예제]
Turtle의 객체.fillcolor(‘색 이름’) Turtle의 색을 지정한 색으로 변경 종류) white, red, green, blue…
turtle 그래픽 모듈의 Turtle() 객체를 만들어
myturtle 이라는 이름으로 부르자(참조라고 함)
[예제 14-2] turtle 이동시키기 (1/2)
14
14.2. turtle 클래스가 제공하는 메소드
[예제 14-2] turtle 이동시키기 (2/2)
15
14.2. turtle 클래스가 제공하는 메소드
각도 지정해서 움직이기
16
14.2. turtle 클래스가 제공하는 메소드
▪ 앞서 turtle이 앞, 뒤로 움직이는데 각도를 지정해주어 모든 방향을 자유자재로 움직이도록 할 수 있다.
▪ 각도를 지정하는 방식에는 여러 가지가 있는데, 이 중 대표적인 방법에는 2가지가 있다.
[예제]
turtle의 객체.setheading(각도) 원점을 기준으로 지정한 각도만큼 방향을 바꿈 turtle의 객체.left(각도) /
right(각도) 왼쪽 또는 오른쪽 방향으로 지정한 각도만큼 방향을 바꿈
17
18
[예제]
19
14.2. turtle 클래스가 제공하는 메소드
[주의] 객체의 방향
20
14.2. turtle 클래스가 제공하는 메소드
▪ 주의할 점은 객체의 방향을 정할 때 기준과 방향을 정확하게 알아야 한다는 것이다.
▪ setheading() 메소드를 사용하여 방향을 지정할 때는 turtle의 머리를 기준으로 왼쪽 방향으로 각도를 계산한다.
▪ left() 혹은 right() 메소드를 사용할 때는 turtle의 머리 기준으로 왼쪽인지 오른쪽인지 잘 보고 각도를 지정하면 된다. 그래서 setheading(90)과 left(90)은 동일한 역할을 한다.
21
22
23
import ~ as 구문
- “turtle이라는 모듈을 t라는 이름으로 import하라”
- turtle.shape() 대신에 t.shape() 으로 사용가능함
원 그리기
24
14.2. turtle 클래스가 제공하는 메소드
▪ 원의 반지름을 지정하여 메소드를 호출하면 그에 해당하는 원을 그릴 수 있다.
▪ circle()은 turtle을 이용하여 더 심화되고 복잡한 그래픽적인 이미지를 만들어 낼 때 많이 쓰이는 메소드이다.
[참고] 작업 도중 reset 하기
▪ turtle 객체를 이용하다 보면 객체의 위치를 원위치인 중간으로 가져오거나 화면을 다시 초기 상태로 만들어야 할 때가 생긴다.
▪ 또는 그림을 완성한 후 그림 본연의 모습을 보기 위해 객체를 숨기고자 하는 경우도 생기게 된다.
▪ 그럴 때 다음과 같은 메소드를 사용하여 진행한다.
turtle의 객체.circle
(반지름 길이) 원점을 기준으로 지정한 반지름 길이에 해당하는 원을 그림
turtle의 객체.hideturtle() turtle을 숨김
turtle의 객체.home() turtle을 초기 위치로 되돌림 turtle의 객체.clear() 화면을 초기 상태로 되돌림
좌표로 움직이기
25
14.2. turtle 클래스가 제공하는 메소드
▪ 좌표 기준으로 지정하는 turtle 객체 이동 방법이 있다.
▪ 원래 turtle 클래스의 객체는 지정된 x, y 좌표 위에 나타나기 때문에 좌표를 활용하여 움직이면 된다.
[예제]
Turtle의 객체.setposition(x좌표, y좌표) Turtle의 위치를 지정한 좌표(x,y)로 바꿔줌 Turtle의 객체.position() Turtle의 현재 위치를 나타냄
[예제 14-4] 정사각형 만들기 (1/2)
26
14.2. turtle 클래스가 제공하는 메소드
[예제 14-4] 정사각형 만들기 (1/2)
27
14.2. turtle 클래스가 제공하는 메소드
펜 들고 내리기 (1/3)
28
14.2. turtle 클래스가 제공하는 메소드
▪ turtle이 이동할 때 선이 그어지는 것에 대하 여부를 결정하고 싶을 때는 다음과 같은 메소드를 사용하면 된다.
[예제]
turtle의 객체.penup() turtle의 pen이 놓여 짐. 이동할 때 선을 그리지 않음
펜 들고 내리기 (2/3)
29
14.2. turtle 클래스가 제공하는 메소드
turtle의 객체.pendown() turtle의 pen이 들려짐. 이동할 때 선을 그림
▪ turtle 객체를 이동시키기 전, 선을 그리는 혹은 그리지 않는 상태의 여부를 알고 싶다면 다음과 같은 메소드를 사용하여 확인한다.
펜 들고 내리기 (3/3)
30
14.2. turtle 클래스가 제공하는 메소드
turtle의 객체.isdown() turtle의 pen의 상태를 알려줌
펜이 놓여져 있으면 True, 놓여있지 않으면 False 반환
>>> turtlee.isdown()
True
[실습 14-1] penup & pendown 응용하여 심화된 그림 그리기
31
14.2. turtle 클래스가 제공하는 메소드
[실습 14-1] penup & pendown 응용하여 심화된 그림 그리기
32
14.2. turtle 클래스가 제공하는 메소드
[실습 14-2] 눈사람 그리기
33
14.2. turtle 클래스가 제공하는 메소드
[실습 14-2] 눈사람 그리기
34
14.2. turtle 클래스가 제공하는 메소드
14장. turtle로 그림 그리기 turtle 객체
14.3. 조건문과 반복문 사용하여 동작 조절하기
조건문이나 반복문이 사용되는 이유
36
14.3. 조건문과 반복문 사용하여 동작 조절하기
▪ 앞서 배운 메소드들을 사용하여 별 모양을 그렸을 때,
조건문이나 반복문이 없다면, (a)와 같이 프로그램을 짜게 된다.
하지만, 조건문이나 반복문이 들어간다면 (b)와 같은 짧은 프로그램으로 짤 수 있다.
[예제 14-5] 정오각형 그리기 (1/2)
37
14.3. 조건문과 반복문 사용하여 동작 조절하기
[예제 14-5] 정오각형 그리기 (2/2)
38
14.3. 조건문과 반복문 사용하여 동작 조절하기
14장. turtle로 그림 그리기 turtle 객체
14.4. 다른 클래스와 함께 turtle 사용하기
다른 클래스와 함께 사용하기
40
14.4. 다른 클래스와 함께 turtle 사용하기
▪ turtle 또한 클래스이므로 앞 장에서 배웠던 다른 클래스들도 함께 사용이 가능하다.
▪ 예를 들어, random 클래스를 포함하여 turtle 객체의 이동 거리를 임의의 수를 주는 것이 가능하다.
▪ 위와 같은 아이디어로 다양한 프로그램을 작성하는 것이 가능하다.
▪ 참고로 다른 클래스를 포함하여 프로그램을 작성할 때는 파일로 작성하는 것이 더욱 효율적이다.
[실습 14-3] 무작위로 움직이는 turtle
41
14.4. 다른 클래스와 함께 turtle 사용하기
[실습 14-3] 무작위로 움직이는 turtle
42
14.4. 다른 클래스와 함께 turtle 사용하기
43
[실습 14-4] 무작위로 움직이는 여러 마리의 turtle
44
14.4. 다른 클래스와 함께 turtle 사용하기
[실습 14-4] 무작위로 움직이는 여러 마리의 turtle
45
14.4. 다른 클래스와 함께 turtle 사용하기
[참고] list를 이용하여 turtle 관리하기
46
14.4. 다른 클래스와 함께 turtle 사용하기
▪ turtle의 객체를 여러 개 생성하는 경우, 한꺼번에 관리하기 위해 list를 사용하는 것이 효율적이다.
위의 [실습 14-4] 가 그 예이다.
▪ 예를 들어, 4개의 turtle 객체를 생성하여 list인 turtles에 넣는다고 가정했을 때 프로그램은 다음 과 같다.
47
48
49
다음과 같은 turtle graphic을 그리시오
- red, green, blue, gray의 turtle 이 랜덤하게 움직임
50
[연습문제]
51
14.4. 다른 클래스와 함께 turtle 사용하기
2. 다음 프로그램의 잘못된 부분을 찾고, 고쳐 보아라.
[연습문제]
52
14.4. 다른 클래스와 함께 turtle 사용하기
3. 다음 요구사항에 맞추어 프로그램을 작성해보자.
▪ 참조
53 http://ivis.kr/index.php/
2017_%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%84%B0%ED%8B%80%EA%B7%B8%EB%9E%98%ED%94%BD
54