
<문제>
그림은 시간 t=0일 때, 매질 A에서 매질 B로 x축과 나란하게 진행하는 파동의 변위를 위치 x에 따라 나타낸 것이다. A에서 파동의 진행 속력은 4m/s이다. 이에 대한 설명으로 옳은 것만을 <보기>에서 있는 대로 고른 것은?
<보기>
ㄱ. 파동의 진동수는 A에서가 B에서의 2배이다.
ㄴ. B에서 파동의 진행 속력은 8m/s이다.
ㄷ. t=0.5초일 때, x=12m에서 파동의 변위는 0이다.
<선택지>
① ㄱ ② ㄷ ③ ㄱ, ㄴ ④ ㄴ, ㄷ ⑤ ㄱ, ㄴ, ㄷ
[풀이]
문제 풀이의 핵심은 아래 그림에서 매질 A와 B의 경계에서 파동이 어떻게 동작하는 지 상상하는 것이다.

그림에서 보다 시피 x=6 에 위치한 경계선에서 사인파의 y 값(파고)이 이어진다는 것을 알 수 있다.
시험을 보다가 위와 같은 애니메이션 프로그램을 짤 수는 없다. 따라서 수험생 입장에서 우리는 진행 속도가 서로 다른 두 매질의 경계에서 파동이 이런 식으로 진행한다는 것을 기억하고, 머리 속에 상상할 수 있는 능력을 갖출 필요가 있다.
이제 조건 (ㄱ)을 보자.

진동수는 단위 시간당 몇 번 진동하느냐의 문제다. 매질 A와 B의 경계면인 직선 x=6에서 파고를 잘 살펴보면, 직선에 바로 인접한 x=5.999 위치는 매질 A라고 볼 수 있고, x=6.001 위치는 매질 B라고 볼 수 있다. 파고 y(5.999) 는 거의 파고 y(6.001)와 같다. 모든 순간에. 모든 순간 파고가 일치하는 두 개의 파동은 진동수가 같아야 한다. 따라서 매질 A와 매질 B에서 진동수는 같다. 2배 아니다.
조건 (ㄱ)은 거짓.

다음으로 조건 (ㄴ)을 살펴보자.

x=6에서 파면이 연속적이고, 매질 A에서 파동의 이동 속도가 4m/s 라면, 파장이 2 배인 매질 B에서 파동의 이동 속도는 4m/s의 2배인 8m/s가 되어야 한다. (딱 봐도 오른쪽에서 파동이 두 배 빠르게 이동하고 있는 게 느껴지지 않는가?)
조건 (ㄴ)는 참.
마지막으로 조건 (ㄷ)을 보자.

t=0.5 라면 파동이 제시문의 그림에서 우측으로 2m(매질 A 기준, 파란 화살표 참조) 이동한 상황이다. 그림으로 표현해 보면 아래와 같다.

따라서 변위(x=12에서의 파고 y=0)는 0이 맞다.
조건 (ㄷ)도 참이다.
결론적으로 답은 4가 된다.



[파이썬 프로그램]
# Wave animation across two media (A→B) matching the snapshot in the prompt.
# - Medium A (x ≤ 6 m): wavelength λ_A = 4 m, speed v_A = 4 m/s (given)
# - Medium B (x ≥ 6 m): wavelength λ_B = 8 m (from figure),
# so with frequency continuity f = v_A/λ_A = 1 Hz → v_B = 8 m/s
# - Snapshot at t = 0: crest at x=2 and x=6 in A, trough at x=4;
# crest at x=6, trough at x=10, zero near x=12, crest at x=14 in B.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
# -----------------------
# Domain and parameters
# -----------------------
x_min, x_max = 0.0, 14.0
boundary = 6.0 # interface between media A and B
A = 1.0 # amplitude (arbitrary units)
# Medium A
lambda_A = 4.0 # m (from figure; crests at 2 and 6)
v_A = 4.0 # m/s (given)
k_A = 2*np.pi/lambda_A
f = v_A / lambda_A # 1 Hz
omega = 2*np.pi*f
# Medium B (frequency is continuous across boundary)
lambda_B = 8.0 # m (from figure; crests at 6 and 14)
v_B = f * lambda_B # 8 m/s
k_B = 2*np.pi/lambda_B
# -----------------------
# Wave profile
# -----------------------
# Choose phases so t=0 profile matches the figure exactly:
# y_A(x,0) = A cos[ 2π(x - 2)/λ_A ] → crests at x=2,6 in A
# y_B(x,0) = A cos[ 2π(x - 6)/λ_B ] → crest at 6, trough at 10, crest at 14 in B
def y_profile(x, t):
y = np.zeros_like(x)
mask_A = x <= boundary
mask_B = x >= boundary
# Right-going harmonic waves in each medium
if np.any(mask_A):
xa = x[mask_A]
y[mask_A] = A * np.cos(2*np.pi*(xa - v_A*t - 2.0)/lambda_A)
if np.any(mask_B):
xb = x[mask_B]
y[mask_B] = A * np.cos(2*np.pi*(xb - v_B*t - 6.0)/lambda_B)
return y
# -----------------------
# Figure / Animation
# -----------------------
fig, ax = plt.subplots(figsize=(8, 3.4), dpi=130)
x = np.linspace(x_min, x_max, 1000)
(line,) = ax.plot([], [], lw=2)
ax.set_xlim(x_min, x_max)
ax.set_ylim(-1.3, 1.3)
ax.set_xlabel("x (m)")
ax.set_ylabel("Displacement (arb. units)")
# Interface marker and labels
ax.axvline(boundary, linestyle="--", linewidth=1)
ax.text(1.5, 1.05, "Medium A", fontsize=10)
ax.text(9.0, 1.05, "Medium B", fontsize=10)
title = ax.text(0.02, 0.92, "", transform=ax.transAxes, fontsize=10)
def init():
line.set_data([], [])
title.set_text("t = 0.000 s")
return line, title
def update(frame):
t = frame
y = y_profile(x, t)
line.set_data(x, y)
title.set_text(f"t = {t:0.3f} s")
return line, title
# One period because f = 1 Hz → T = 1 s
T = 1.0
frames = np.linspace(0.0, T, 80)
ani = FuncAnimation(
fig, update, frames=frames, init_func=init, blit=True, interval=1000 * (T / len(frames))
)
# Save GIF (optional)
# Requires 'pillow' package: pip install pillow
gif_path = "wave_medium_AB.gif"
ani.save(gif_path, writer=PillowWriter(fps=30))
print(f"Saved: {gif_path}")
# If you want to just show the animation window instead of saving, comment out the two lines above
# and uncomment the line below:
# plt.show()
[출처: 2026년 7월 모평/모의고사 고3 물리1 14번]
'물리 > 파동' 카테고리의 다른 글
| 주기 0.75Hz 파동의 움직임 해석 (4) | 2025.08.17 |
|---|
