※ 포물선 운동 궤적 그리기
- 물체의 초기 속도를 v라고 하고 각도를 # 이라고 할때 x축 방향 ux = v * cox#
y축 방향 uy = v * sin# 로 계산할 수 있다. 시간이 지날수록 속도는 변하며 x 축은 속도가 변하지 않은
상태로 동일한 속도가 유지되고 y축 방향은 중력의 영향으로 인해 y 축 속도가 vy = v * sin# - g * t가 된다.
이러한 속도 변화의 특성을 이용해 터틀 스크린에서 포물선 운동 궤적을 그려본다.
import turtle as t
import math
tm = 0.3 # 시간 간격
ux = 0 # x 속도
uy = 0 # y 속도
dx = 0 # x 이동 거리
dy = 0 # y 이동 거리
g = 9.8 # 중력 가속도
velo = 0 # 속도
ang = 0 # 각도
def draw_pos(x, y):
velo = t.numinput("입력", "속도 : ", 50, 10, 100) # 터틀 스크린에서 속도를 입력받아 velo에 저장
ang = math.radians(t.numinput("입력", "각도 : ", 45, 0, 360)) # 터틀 스크린에서 각도를 입력받아 ang에 저장
t.clearstamps()
t.hideturtle()
t.setpos(x, y)
t.showturtle()
t.stamp()
hl = -(t.window_height() / 2) # 터틀 스크린 하단의 y축 좌표를 hl에 저장
ux = velo * math.cos(ang)
uy = velo * math.sin(ang)
while True:
uy = uy + (-1 * g) * tm
dy = t.ycor() + (uy * tm) - (g * tm**2) / 2
dx = t.xcor() + (ux * tm)
if dy > hl: # 만약 터틀의 위치가 스크린의 하단. 즉, hl보다 높은경우 행동을 지속함
t.goto(dx, dy)
t.stamp()
else: # 스크린의 하단으로 나갈경우 중단
break
t.setup(600, 600)
t.shape("circle")
t.shapesize(0.3, 0.3, 0)
t.penup()
s = t.Screen()
s.onscreenclick(draw_pos)
s.listen()
t.mainloop()
'기타 > What I Learned' 카테고리의 다른 글
[TIL] 파이썬으로 배우는 STEAM 코딩(21.11.26) (0) | 2021.11.26 |
---|---|
[TIL] 파이썬으로 익히는 STEAM코딩 (21.11.25) (0) | 2021.11.25 |
[TIL] 파이썬으로 익히는 STEAM 코딩 (21.11.23) (0) | 2021.11.23 |
[TIL] 파이썬으로 익히는 STEAM 코딩(21.11.22) (0) | 2021.11.22 |
[TIL] 2021.11.20 (0) | 2021.11.20 |