일반역학 [PYTHON] 파이썬 예제코드입니다 - vpython(7) 공의 자유낙하 애니메이션2, free-fall
2020.05.27 21:48
[PYTHON] 파이썬 예제코드입니다 -
vpython(7) 공의 자유낙하 애니메이션2, free-fall
제가 프로그래밍을 공부하기 위해 작성한 코드입니다
혹시 비슷한 분야를 공부하시는 분들은 허접한 코드지만 참고해서 봐주세요~
코드는 대부분 여러 고수님들의 코드를 참고해 작성했습니다 :-)
위의 조건을 바탕으로
공의 자유낙하운동을 하는 애니메이션 코드를 작성하고
공의 x,v,a를 시간에 따라 그래프로 표현하는 코드를 작성하시오
공은 완전탄성충돌을 한다
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 g = -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) #------------------------------------------------------------------ # 애니메이션 코드 #------------------------------------------------------------------ t = 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
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.