import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
from tkinter import ttk
def plot_graph():
# 사용자 입력값 가져오기
A = float(amplitude_entry.get())
B = float(period_entry.get())
C = float(phase_entry.get())
D = float(vertical_entry.get())
# x 값의 범위 설정
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# 코사인 함수 계산
y = A * np.cos(B * (x - C)) + D
# 기존 그래프 삭제
ax.clear()
# 새 그래프 그리기
ax.plot(x, y, label=r'$y = A \cos(B(x - C)) + D$')
ax.set_title('코사인 함수의 그래프')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)
ax.grid(color='gray', linestyle='--', linewidth=0.5)
ax.legend()
# 그래프 업데이트
canvas.draw()
# Tkinter 윈도우 생성
root = tk.Tk()
root.title('코사인 함수 그래프')
# 사용자 입력을 위한 프레임
input_frame = ttk.Frame(root, padding="10")
input_frame.grid(row=0, column=0, padx=10, pady=10)
# 라벨과 입력 필드 생성
ttk.Label(input_frame, text="진폭 (A):").grid(row=0, column=0, padx=5, pady=5)
amplitude_entry = ttk.Entry(input_frame)
amplitude_entry.grid(row=0, column=1, padx=5, pady=5)
amplitude_entry.insert(0, "1")
ttk.Label(input_frame, text="주기 관련 상수 (B):").grid(row=1, column=0, padx=5, pady=5)
period_entry = ttk.Entry(input_frame)
period_entry.grid(row=1, column=1, padx=5, pady=5)
period_entry.insert(0, "1")
ttk.Label(input_frame, text="위상 이동 (C):").grid(row=2, column=0, padx=5, pady=5)
phase_entry = ttk.Entry(input_frame)
phase_entry.grid(row=2, column=1, padx=5, pady=5)
phase_entry.insert(0, "0")
ttk.Label(input_frame, text="수직 이동 (D):").grid(row=3, column=0, padx=5, pady=5)
vertical_entry = ttk.Entry(input_frame)
vertical_entry.grid(row=3, column=1, padx=5, pady=5)
vertical_entry.insert(0, "0")
# 그래프를 그릴 버튼
plot_button = ttk.Button(input_frame, text="그래프 그리기", command=plot_graph)
plot_button.grid(row=4, column=0, columnspan=2, pady=10)
# matplotlib 그래프를 표시할 프레임
fig, ax = plt.subplots(figsize=(8, 6))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas_widget = canvas.get_tk_widget()
canvas_widget.grid(row=1, column=0, padx=10, pady=10)
# Tkinter 이벤트 루프 시작
root.mainloop()