학습목표
- 다양한 기능을 불러서 사용하기 위한 모듈 기능을 이해할 수 있다.
- 다양한 그래픽 객체를 생성하고 변형시킬 수 있다.
학습하기
학습목표
학습하기
모듈
Python의 모듈은 여러 함수들을 묶어서 파일로 만든 것입니다.
Python은 기본적으로 수많은 유용한 모듈을 제공하고 있습니다.
또한, 새로운 모듈을 직접 만들 수도 있습니다.
* math 모듈은 수학적 함수들을 제공합니다.
* random 모듈은 난수, 무작위 섞기 등의 함수들을 제공합니다.
* sys와 os 모듈은 운영체제와 관련된 함수들을 제공합니다.
* urllib 모듈은 웹에서 파일을 다운받는 함수들을 제공합니다.
* cs1robots 모듈은 휴보에 관련된 함수들을 제공합니다.
* cs1graphics 모듈은 그래픽과 관련된 함수들을 제공합니다.
* cs1media 모듈은 사진의 처리와 관련된 함수들을 제공합니다.
모듈의 정보는 help 함수를 이용해서 볼 수 있습니다.
모듈 들여오기
모듈을 사용하려면 import를 이용해 모듈을 들여와야 합니다.
import math
print(math.sin(math.pi))
다음처럼 모듈의 함수를 모듈 이름을 붙이지 않고 사용할 수 있습니다.
from math import *
print(sin(pi)) # OK
print(math.pi) # NameError: name 'math'
필요한 함수들만 모듈에서 들여오는 것도 가능합니다.
from math import sin
print(sin(3.14)) # OK
print(pi) # NameError: name ‘pi'
print(cos(3.14)) # NameError: name 'cos‘
print(math.cos(3.14)) # NameError: name 'math'
Import 예시
다음 코드는
from cs1robots import *
create_world()
hubo = Robot()
hubo.move()
hubo.turn_left()
다음 코드와 동일한 의미를 가집니다.
import cs1robots
cs1robots.create_world()
hubo = cs1robots.Robot()
hubo.move()
hubo.turn_left()
일반적으로, import *는 사용하지 않는 것이 좋습니다.
그림 그리기
그림을 그리기 위해서는, 먼저 그림을 그릴 캔버스를 만들어야 합니다.
from cs1graphics import *
canvas = Canvas(400, 300)
canvas.setBackgroundColor("light blue")
canvas.setTitle("CS101 Drawing exercise")
캔버스의 좌표계는
x좌표는 0부터 3왼쪽에서 오른쪽으로,
y좌표는 0부터 299까지 위에서 아래로 증가합니다99까지.
그래픽 객체
그래픽 객체를 캔버스에 추가하는 방식으로 캔버스에 그림을 그릴 수 있습니다.
* 원: Circle(radius)
* 정사각형: Square(side)
* 직사각형: Rectangle(width, height)
* 다각형: Polygon
* 선: Path
* 글자: Text(message, font_size)
* 이미지: (image_filename)
객체의 외곽선 색을 바꾸거나 알아보려면 (color는 문자열 또는 (r,g,b) 튜플)
obj.setBorderColor(color)
obj.getBorderColor()
객체 내부의 색을 바꾸거나 알아보려면 (color는 문자열 또는 (r,g,b) 튜플)
: 원, 정사각형, 직사각형, 다각형 객체에만 사용할 수 있습니다.
obj.setFillColor(color)
obj.getFillColor()
기준점
모든 그래픽 객체는 기준점을 가지고 있습니다.
캔버스상의 객체의 기준점 위치는 move(dx, dy)나 moveTo(x, y) 함수를 이용해 바꿀 수 있습니다.
다음과 같이 애니메이션을 만들 수도 있습니다.
그래픽 객체의 깊이 순서
깊이를 변경하려면
회전, 뒤집기, 크기 조정
각 객체는 기준점을 기준으로 회전시킬 수 있습니다.
scale을 통해 객체의 크기를 키우거나 줄일 수 있습니다.
Fade-out 효과를 주기 위해서는
for i in range(80):
sq.scale(0.95)
canvas.remove(sq)
레이어
레이어는 여러 개의 그래픽 객체들을 묶어서 같이 변형할 수 있게 합니다.
car = Layer()
tire1 = Circle(10, Point(-20,-10))
tire1.setFillColor('black')
car.add(tire1)
tire2 = Circle(10, Point(20,-10))
tire2.setFillColor('black')
car.add(tire2)
body = Rectangle(70, 30, Point(0, -25))
body.setFillColor('blue')
body.setDepth(60)
car.add(body)
차에 애니메이션을 주기 위해서는
for i in range(250):
car.move(2, 0)
변형
하나의 레이어는 하나의 객체처럼 변형할 수 있습니다.
for i in range(50):
car.move(2, 0)
for i in range(22):
car.rotate(-1)
for i in range(50):
car.move(2,-1)
for i in range(22):
car.rotate(1)
for i in range(50):
car.move(2,0)
for i in range(10):
car.scale(1.05)
참고자료
comment
for i in range(100):
sq.move(1,0)
time.sleep(0.1)
Traceback (most recent call last):
File "<pyshell#59>", line 3, in <module>
time.sleep(0.1)
NameError: name 'time' is not defined. Did you mean: 'Timer'?
이런 Error 메세지만 뜬는데 왜일까요?
진짜 너무 재밌어요...
감사합니다!
우왕 너무 재밌어요~!!
이번 강좌는 교재 예제인 첨부파일도 함께 봐야합니다. 왜냐하면 동영상 따라하며 canvas는 canvas = Canvas(400,300)으로 잘 만들었는데요. circle = Circle(30) 만들었는데 화면에 안뜨는 거에요. 이상했어요. 그래서 첨부파일을 열어보니까 canvas.add(circle) 이렇게 cicle를 canvas에 추가해주어야 화면에 나타났습니다!. 그런데 canvas.add() 기능은 동영상에서 못보았어요. 강의 뒷 부분의 car를 만든 레이어도 마찬가지로 cavas.add(car)를 해줘야하고 또 car.move(50,50)정도 해주면 화면에 보입니다. 그래서 첨부 파일 코드도 함께 봐야 합니다.
감사합니다~
감사합니다.
감사합니다