더북(TheBook)

프로그램 1.5.7 튕기는 공 (bouncingball.py)

import stddraw 
 
stddraw.setXscale(-1.0, 1.0)
stddraw.setYscale(-1.0, 1.0)
 
DT = 20.0
RADIUS = 0.05
rx = 0.480
ry = 0.860
vx = 0.015
vy = 0.023
 
while True: 
    # 공의 위치를 갱신하고 새로운 위치에 공을 그린다.
    if abs(rx + vx) + RADIUS > 1.0: vx = -vx
    if abs(ry + vy) + RADIUS > 1.0: vy = -vy
    rx = rx + vx
    ry = ry + vy
 
    stddraw.clear(stddraw.GRAY)
    stddraw.filledCircle(rx, ry, RADIUS)
    stddraw.show(DT)
DT
RADIUS
rx, ry
vx, vy
대기 시간
공의 반지름
공의 위치
공의 속도

이 프로그램은 표준 캔버스에 튕기는 공을 그린다. 즉, 기본 캔버스를 상자로 가정하고 그 안에서 튕기는 공을 흉내 낸다. 공은 탄성 충돌 법칙에 따라 경계선에서 튕긴다. 공이 있던 자리의 픽셀은 검은색이나 흰색으로 변하지만, 20밀리초 동안 머무는 검은 공 이미지는 화면 위에 계속 남아 있다. 대기 시간 DT를 명령 줄 인수로 받도록 수정하면 프로그램을 실행할 때 공의 속도를 지정할 수 있다. 아래 그림은 이 프로그램에서 stddraw.clear()를 루프 외부에서 호출하도록 수정해 공의 자취가 남도록 변경해 실행한 이미지이다([연습문제 1.5.34] 참조).

루프 100번 반복

루프 200번 반복

루프 500번 반복

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.