[PYTHON] 파이썬 예제코드입니다 -

vpython(7) 공의 자유낙하 애니메이션2, free-fall 

제가 프로그래밍을 공부하기 위해 작성한 코드입니다
혹시 비슷한 분야를 공부하시는 분들은 허접한 코드지만 참고해서 봐주세요~
코드는 대부분 여러 고수님들의 코드를 참고해 작성했습니다 :-)

공의 자유낙하 운동 + x-t,v-t,a-t 그래프

 

위의 조건을 바탕으로
공의 자유낙하운동을 하는 애니메이션 코드를 작성하고

공의 x,v,a를 시간에 따라 그래프로 표현하는 코드를 작성하시오
공은 완전탄성충돌을 한다

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# code from    http://tcjd71.wixsite.com/vpython/blank-1
from visual import *
from visual.graph import *
 
#------------------------------------------------------------------
# 그래픽 그려주는 코드
#------------------------------------------------------------------
 
# 그래픽창을 설정하는 코드
scene.range = (5,5,5)
scene.center = (0,1,0)
scene.width = 400
scene.height = 400
 
size = 0.2  # 공의 반지름 m
= -9.81   # 중력가속도
 
# 공을 생성하고 초기 위치를 3m로 설정합니다
ball = sphere(radius=size, color=color.white)
ball.pos = (0,3,0)
ball.v = vector(0,0,0)
 
# 바닥면을 생성합니다
bottom = box(pos=(0,-1+size,0), length=3, heigth=0.1, width=3, material=materials.wood)
 
# x-t,v-t,a-t 그래프창을 생성합니다 
gd = gdisplay(width=500, height=300, x=410, y=0, title='y vs t', xtitle='t', ytitle='x', ymax=3, ymin=-3, xmax=10)
gd2 = gdisplay(width=500, height=300, x=410, y=250, title='v vs t', xtitle='t', ytitle='vel', ymax=20, ymin=-20, xmax=10)
gd3 = gdisplay(width=500, height=300, x=410, y=400, title='a vs t', xtitle='t', ytitle='acc', ymax=10, ymin=-10, xmax=10)
 
# 그래프창에 그려질 그래프 곡선들을 설정합니다
xt = gcurve(gdisplay=gd, color=color.cyan)
vt = gcurve(gdisplay=gd2, color=color.cyan)
at = gcurve(gdisplay=gd3, color=color.cyan)
 
# 속도 화살표 객체를 생성합니다
vel_arrow = arrow(pos=ball.pos, axis=ball.v, color=color.yellow)
 
 
 
#------------------------------------------------------------------
# 애니메이션 코드
#------------------------------------------------------------------
 
= 0
dt = 0.0004   
 
label1 = label()
label2 = label()
 
while True:
    rate(2500)  # rate * dt = 1이 되게 설정하면 실제 시간과 같은 루프주기를 얻을 수 있습니다
    t += dt
 
    # 공이 땅에 닿으면 (y == 0) 공의 속도를 반대로 바꿉니다. 완전탄성충돌
    if ball.pos.y <= 0:
        ball.v.y = abs(ball.v.y)
 
    # 공의 위치,속도,가속도를 그래프화합니다
    xt.plot(pos=(t, ball.pos.y))
    vt.plot(pos=(t,ball.v.y))
    at.plot(pos=(t,g))
 
    # 공의 위치와 속도를 업데이트합니다
    ball.pos += ball.v*dt
    ball.v.y += g*dt
 
    # 속도화살표를 업데이트합니다. 0.3을 곱해서 화살표의 크기를 줄입니다
    vel_arrow.pos = ball.pos
    vel_arrow.axis = ball.v*0.3
    
    # 텍스트 데이터
    label1.pos = bottom.pos + vector(0-0.5,0)
    label1.text = 'time : %.2f s' % t
    label2.pos = bottom.pos + vector(0-1.2,0)
    label2.text = 'vel : %.2f m/s' % ball.v.y
 
Colored by Color Scripter

[출처] https://blog.naver.com/gyurse/221034749868

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED