[VPython] 시뮬레이션 (애니메이션)

παντοκράτωρ·2021년 7월 6일
0

VPython

목록 보기
4/5

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

0개의 댓글