터틀 그래픽 실습 2
수업 목표
- 함수(
def)를 터틀 드로잉과 연계하여, 특정 위치와 크기를 매개변수로 받아 독립된 그림 요소를 그리는 모듈형 드로잉 구조를 구축할 수 있다. - 펜 제어 명령(up, down, color, width)을 정확히 통제하여 선이 겹치거나 지저분하게 흔적이 남는 현상을 방어할 수 있다.
- 반복되는 도형 모듈 호출과 회전 각도 연산을 엮어 눈결정, 꽃 등 기하학적인 응용 작품을 구현할 수 있다.
생각해보기: 조립식 완구와 그림 그리는 로봇
레고 블록으로 큰 성을 지을 때, 성벽 블록과 창문 블록, 지붕 블록을 각각 규격에 맞게 따로 제작해둔 뒤 이를 조립하여 최종 작품을 만듭니다. 만약 그림을 그릴 때도 "나무 그리는 로봇", "구름 그리는 로봇"을 별도로 프로그래밍해서 필요한 위치에 가져다 놓을 수 있다면, 거북이 화가를 일일이 수동 조종하는 것보다 훨씬 편리하고 완성도 높은 풍경화를 그릴 수 있을 것입니다.
드로잉 로직을 함수(def)의 묶음으로 설계하고, 여러 색상과 두께를 가미하여 화면 위에 아름다운 조립식 기하학 패턴이나 그래픽 요소를 그려내는 심화 기법을 마스터해 봅시다.
1. 펜 제어 명령어 — 그릴 때와 이동할 때 분리하기
거북이가 그림을 그릴 때, 특정 위치로 펜 자국을 남기지 않고 이동만 해야 하는 경우가 있습니다. 이때 사용하는 핵심 펜 제어 기능들입니다.
penup() / up():펜을 종이에서 떼어냅니다. 이후 거북이가 움직여도 선이 그려지지 않습니다.pendown() / down():펜을 종이에 댑니다. 이후 움직이는 경로에 선이 그려집니다.goto(x, y):화면 상의 특정 X, Y 좌표 위치로 거북이를 한 번에 강제 이동시킵니다.color("색상"):선의 색상을 변경합니다. ("red", "blue", "green" 등 영어 단어 지정)pensize(두께) / width(두께):선의 두께를 조절합니다.
import turtle
t = turtle.Turtle()
# 펜 자국 없이 특정 좌표로 안전하게 이동하는 정석 코드
t.penup()
t.goto(-100, 50) # X: -100, Y: 50 위치로 순간 이동
t.pendown()
t.color("blue")
t.pensize(5)
t.forward(100) # 이동한 자리에서 두께 5의 파란색 선 드로잉
2. 드로잉 함수 모듈화 — 조립식 그림 그리기
특정 도형을 그리는 연산을 하나의 함수로 정의해두면, 크기(size)와 색상(color), 위치(x, y)를 매개변수로 전달받아 언제든 다르게 그려내는 만능 부품이 됩니다.
import turtle
t = turtle.Turtle()
# 특정 좌표에 원하는 크기와 색상으로 정사각형을 그리는 함수 정의
def draw_square(x, y, size, color_name):
t.penup()
t.goto(x, y)
t.pendown()
t.color(color_name)
for _ in range(4):
t.forward(size)
t.right(90)
# 정의한 함수를 각각 다른 인자로 호출하여 화면 조립
draw_square(-150, 100, 50, "red") # 왼쪽 상단에 빨간 사각형
draw_square(100, -50, 120, "green") # 오른쪽 하단에 큰 초록 사각형
turtle.done()
3. 기하학 패턴 만들기 — 루프 속의 드로잉 함수
한 번 정의해 둔 도형 드로잉 함수를 for 반복문 내부에 탑재하고 회전 명령을 추가하면, 꽃이나 눈결정과 같은 신비로운 기하학 문양을 완성할 수 있습니다.
import turtle
t = turtle.Turtle()
t.speed(0) # 드로잉 속도를 가장 빠르게(0) 설정
# 사각형 드로잉 함수
def draw_box(size):
for _ in range(4):
t.forward(size)
t.right(90)
# 사각형을 10도씩 돌려가며 36번 반복 호출하여 원형 꽃 문양 완성
t.color("purple")
for _ in range(36):
draw_box(100)
t.right(10) # 10도 회전
turtle.done()
자주 하는 실수 & 오류 예방
1. penup() 복원 누락으로 인한 투명 드로잉 버그
특정 위치로 이동하기 위해 t.penup() 처리를 한 후, 다시 t.pendown() 복원을 수행하지 않고 전진(forward) 명령을 내렸을 때 화면에 선이 나타나지 않아 작동 불능으로 착각하는 버그입니다.
오류 해결: 거북이 좌표 이동(goto)이 끝나면 본문의 드로잉 코드가 실행되기 전에 **세트로 pendown()을 반드시 호출했는지** 코드를 검토하십시오.
2. 무한 스크린 리셋에 따른 오버헤드
반복해서 많은 도형을 복합적으로 그릴 때 스크린 갱신 딜레이로 속도가 느려지거나 멈추는 상황입니다.
오류 해결: 거북이 동작 인스턴스의 t.speed(0) 명령을 통해 렌더링 성능을 최고조로 끌어올리십시오.
핵심 정리
| 터틀 펜 제어 도구 | 핵심 설계 규칙 | 자주 빚어지는 논리 오차 해결책 |
|---|---|---|
penup() / pendown() |
좌표 이동 시 펜 오프, 드로잉 개시 시 펜 온 | 이동 후 pendown() 선언 누락 검수 |
goto(x, y) |
화면 좌표계 기준 절대값 위치 이동 | 좌측 상단은 X음수/Y양수, 우측 하단은 X양수/Y음수 매핑 주의 |
color() / pensize() |
선 색상 텍스트 지정 및 두께 조정 | 지정한 문자열 색상명이 올바른 스펠링인지 확인 |
이번 주 대회 바로가기
1반 | 2반 | 3반 | 4반 | 5반 | 6반 | 7반 | 8반 | 9반
※ 대회 링크는 선생님이 별도 공지합니다.