import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import numpy as np
# 함수 정의
def plot_graph():
# 사용자 입력값 가져오기
frequency = float(entry_frequency.get())
amplitude = float(entry_amplitude.get())
phase_shift = float(entry_phase.get())
time_end = float(entry_time.get())
# 시간 배열 생성
t = np.linspace(0, time_end, 1000)
# 사인과 코사인 함수 계산
sine_wave = amplitude * np.sin(2 * np.pi * frequency * t + phase_shift)
cosine_wave = amplitude * np.cos(2 * np.pi * frequency * t + phase_shift)
# 그래프 초기화
ax.clear()
ax.plot(t, sine_wave, label='Sine Wave')
ax.plot(t, cosine_wave, label='Cosine Wave')
ax.set_title('Harmonic Oscillator: Sine and Cosine Waves')
ax.set_xlabel('Time')
ax.set_ylabel('Amplitude')
ax.legend()
ax.grid()
# 그래프 업데이트
canvas.draw()
# Tkinter 윈도우 생성
root = tk.Tk()
root.title("Harmonic Oscillator Plotter")
# 입력값을 받을 수 있는 UI 구성
tk.Label(root, text="Frequency (Hz)").grid(row=0, column=0)
entry_frequency = tk.Entry(root)
entry_frequency.grid(row=0, column=1)
entry_frequency.insert(0, "1.0")
tk.Label(root, text="Amplitude").grid(row=1, column=0)
entry_amplitude = tk.Entry(root)
entry_amplitude.grid(row=1, column=1)
entry_amplitude.insert(0, "1.0")
tk.Label(root, text="Phase Shift (radians)").grid(row=2, column=0)
entry_phase = tk.Entry(root)
entry_phase.grid(row=2, column=1)
entry_phase.insert(0, "0.0")
tk.Label(root, text="Time End (seconds)").grid(row=3, column=0)
entry_time = tk.Entry(root)
entry_time.grid(row=3, column=1)
entry_time.insert(0, "10.0")
# 그래프 플롯 버튼 추가
plot_button = tk.Button(root, text="Plot", command=plot_graph)
plot_button.grid(row=4, column=0, columnspan=2)
# Matplotlib Figure 생성
fig, ax = plt.subplots()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=5, column=0, columnspan=2)
# Tkinter 메인 루프 시작
root.mainloop()
'정보통신기술(ICT)' 카테고리의 다른 글
전자기학: 파동 방정식(Sine/Cosine 형태의 파동) (0) | 2024.10.22 |
---|---|
조화진동자의 시간 진화 함수 그래프 (0) | 2024.10.21 |
양자역학 1차원 조화진동자의 파동함수(Hermite Polynomial) (0) | 2024.10.17 |
최대값과 최소값 함수 (0) | 2024.10.15 |
지수 함수 (0) | 2024.10.14 |