자유낙하운동

박종곤·2024년 6월 18일

우선 실험에 필요한 프로그램부터 알려드리겠습니다.

파이썬 코딩을 하기위한 환경이 마련되야 됩니다.

  • visual studio code
  • python

첫번째 실험은 고등학교 1학년 통합과학 시간부터 배운 자유낙하 운동입니다. 우리는 실험을 위해 vpython이라는 모듈을 사용할 예정입니다.

pip install vpython

터미널 창에 위 명령어를 입력하고 vpython을 설치해주세요.

백문이불여일타입니다. 아래 코드를 따라서 작성해주세요.

# 1차원 자유낙하 운동 시뮬레이션

from vpython import *

# Set up scene
scene = canvas(width=800, height=600, background=vector(0.9, 0.9, 0.9))
floor = box(pos=vector(0, -1, 0), size=vector(20, 0.1, 10), color=color.green)

# Parameters
g = vector(0, -10, 0)  # Gravitational acceleration (m/s^2)
initial_position = vector(0, 20, 0)  # Initial position (m)
initial_velocity = vector(0, 0, 0)   # Initial velocity (m/s)
dt = 0.01  # Time step (s)

# Ball
ball = sphere(pos=initial_position, radius=1, color=color.red)

# Animation loop
t = 0
while ball.pos.y >= -1.0:
    rate(100)
    
    # Update velocity (considering gravity)
    initial_velocity += g * dt
    
    # Update position
    ball.pos += initial_velocity * dt코드를 입력하세요

💾 코드분석

첫 시간이니 코드를 하나씩 분석해보도록 하겠다.

from vpython import *코드를 입력하세요

vpython 모듈을 호출하는 명령어이다.

# Set up scene
scene = canvas(width=800, height=600, background=vector(0.9, 0.9, 0.9))
floor = box(pos=vector(0, -1, 0), size=vector(20, 0.1, 10), color=color.green)코드를 입력하세요

실험하는 공간을 만드는 코드이다. canvas나 box 안에 있는 숫자를 변경해서 실행해보자. 그러면 각각의 의미를 손쉽게 이해할 수 있다.

# Parameters
g = vector(0, -10, 0)  # Gravitational acceleration (m/s^2)
initial_position = vector(0, 20, 0)  # Initial position (m)
initial_velocity = vector(0, 0, 0)   # Initial velocity (m/s)
dt = 0.01  # Time step (s)코드를 입력하세요

🥽 파라미터 설정
이 부분이 물리적으로 가장 중요하다. 물리학2 시간에 벡터에 대해서 살짝 맛을 봤다. 일반적으로 3차원 공간에서 시뮬레이션을 진행하기 때문에 vector(x, y, z)는 3가지 성분을 가지고 있다.
g값을 보게 되면 -y 방향으로 10으로 설정되어 있는 걸 확인할 수 있다. 계산을 쉽게 하기 위해 중력 가속도 값을 10으로 잡았다. 이 값을 조절해주면 중력 가속도 값을 조절할 수 있다.
아하 그러면 저 값을 수정해주면 달에서의 자유낙하 운동도 실험할 수 있겠네. 궁금하면 달에서의 중력 가속도를 찾아보고 직접 실험해 보시길.

이 내용을 이해했다면 초기 위치, 초기 속도로 이해했을 거다.

시뮬레이션 시간 간격은 우선 0.01초로 잡았다.

# Animation loop
t = 0
while ball.pos.y >= -1.0:
    rate(100)
    
    # Update velocity (considering gravity)
    initial_velocity += g * dt
    
    # Update position
    ball.pos += initial_velocity * dt코드를 입력하세요

이 코드는 공의 운동을 시뮬레이션하기 위한 애니메이션 루프이다. 중력의 영향을 받는 공이 일정 시간 동안 어떻게 움직이는지 계산하고 그 위치를 업데이트한다.

rate(100):
이 함수는 애니메이션 속도를 제어한다. rate(100)은 초당 100번의 업데이트를 의미한다.

initial_velocity += g * dt:
중력에 의한 속도의 변화를 계산한다. 여기서 initial_velocity는 공의 초기 속도, g는 중력 가속도, dt는 시간 간격이다.

ball.pos += initial_velocity * dt:
공의 위치를 속도에 따라 업데이트한다.

📟 시뮬레이션의 기본 가정
여기서 가장 중요한 가정에 대해 애기하려고 한다. 식을 보면 알겠지만 공의 위치 계산식은 등속운동 공식을 활용했다. 중학교 때부터 줄줄 외우던 거리 = 속도 * 시간

그런데 분면 자유낙하 운동은 등가속도 운동이고 이동거리나 변위 공식을 수업시간에 배웠을 거다. 시간에 제곱에 비례하는 식이 나오는데 왜 여기서는 등속 운동 공식을 활용했을까?

앞으로 우리가 하는 시뮬레이션에서는 아주 짧은 시간 간격 동안은 물체가 등속 운동을 한다고 가정한다.

그러면 계산의 정밀도를 키우려면 어떻게 해야할까? 맞다. 시간 간격을 줄이면 된다. 대신 계산 속도가 느려지겠지...

🖼 실험결과

크롬 창에 다음과 같은 화면이 뜨면서 시뮬레이션 결과를 확인할 수 있다.

📃 도전과제

통합과학 시간에 배운 수평으로 던진 공의 운동도 포함시켜 보자. 정말로 동시에 떨어지는지 시뮬레이션을 통해 확인해보자.

profile
프로그래밍에 관심 있는 교사...

1개의 댓글

comment-user-thumbnail
2025년 5월 24일

선생님 pip install vpython 부터 안먹히면 어떻게 해야 하나요?

답글 달기