프로그램 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번 반복 |