VPython에서는 물체의 움직임을 애니메이션으로 보기 위해서 rate() 를 이용해 프레임 단위로 화면에 출력한다.
아래는 애니메이션 표현을 위해 사용할 변위에 관한 식이다. r은 위치, v는 속력을 나타낸다.
전체 코드
# ball 생성
# trail 속성들과 interval 속성을 이용해 오브젝트의 운동 경로를 볼 수 있다.
ball = sphere(pos=vec(-10, 0, 0), texture=textures.rock,
make_trail=True, trail_type="points", trail_radius=0.05, interval = 4)
# v는 임의로 생성한 속도 변수
ball.v = vec(4, 0, 0)
# 현재 시각과 시뮬레이션의 프레임 시간 간격 설정
t = 0
dt = 0.01
# 애니메이션 루프
while t < 5:
# rate를 100으로 설정, rate는 1초당 프레임 수를 의미, 즉 수가 클수록 부드러운 애니메이션
rate(1/dt)
# r = r + v * dt
ball.pos = ball.pos + ball.v*dt
# 현재 시각 업데이트
t = t + dt
가속도 변수를 생성하고 가속도 공식을 기존의 속도 식에 적용만 해주면 된다.
아래의 이미지는 위에 올린 기존 속도 식에서 a 라는 가속도 변수와 공식이 하나 추가되어 있다.
전체 코드
from random import randint
from vpython import *
# ball 생성
# trail 속성들과 interval 속성을 이용해 오브젝트의 운동 경로를 볼 수 있다.
ball = sphere(pos=vec(-10, 0, 0), texture=textures.rock,
make_trail=True, trail_type="points", trail_radius=0.05, interval=4)
# v는 임의로 생성한 속도 변수
ball.v = vec(0, 0, 0)
# a는 임의로 생성한 가속도 변수
ball.a = vec(1.5, 0, 0)
# 현재 시각과 시뮬레이션의 프레임 시간 간격 설정
t = 0
dt = 0.01
# 애니메이션 루프
while t < 5:
# rate를 100으로 설정, rate는 1초당 프레임 수를 의미, 즉 수가 클수록 부드러운 애니메이션
rate(1/dt)
# v = v + a * dt
ball.v = ball.v + ball.a*dt
# r = r + v * dt
ball.pos = ball.pos + ball.v*dt
# 현재 시각 업데이트
t = t + dt