forked from zoonature/Physics_programmed_by_python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex2-2-9-등가속도운동(오일러크러머 방법과 해석적 방법 비교).py
40 lines (32 loc) · 1.26 KB
/
ex2-2-9-등가속도운동(오일러크러머 방법과 해석적 방법 비교).py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from vpython import *
#GlowScript 3.0 VPython
# 벡터 pos_i, v_i, acc 지정
pos_i = vec(-5,0,0)
v_i = vec(0.1,0,0)
acc = vec(0.1,0,0)
# cart, acart 만들기 (자취 그리기)
cart = box(pos = pos_i, size = vec(0.3,0.3,0.3), color = color.yellow, make_trail = True, trail_type = "points", trail_radius = 0.02, interval = 2)
acart = box(pos = pos_i + vec(0,1,0), size = vec(0.3,0.3,0.3), color = color.white, make_trail = True, trail_type = "points", trail_radius = 0.02, interval = 2)
# 물리 성질 초기화
cart.v = v_i #cart의 초기 속도 ##m/s
acart.v = v_i #acart의 초기 속도 ##m/s
scale = 2.0 #크기 조정을 위한 변수
attach_arrow(cart, "v", scale = 2.0, shaftwidth = 0.1) #화살표 부착
#cart_vel = arrow(pos = cart.pos, axis = scale*cart.v, shaftwidth = 0.1)
# 화면 설정
scene.autoscale = False
# 시간 설정
t = 0 ##s
dt = 0.1 ##s
# 시뮬레이션 루프
while t < 10:
rate(30)
# 수치적인 방법으로 속도, 위치 업데이트
cart.v = cart.v + acc*dt
cart.pos = cart.pos + cart.v*dt
# 시간 업데이트
t = t + dt
# 해석적인 방법으로 위치 업데이트
acart.pos = pos_i+vec(0,1,0) + v_i * t + 0.5*acc*t**2
# 출력
print(cart.pos, acart.pos, abs(acart.pos.x-cart.pos.x))