정보통신기술(ICT)

코사인 함수

해머슴 2024. 9. 6. 09:17
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()


 

'정보통신기술(ICT)' 카테고리의 다른 글

무리 함수  (0) 2024.09.10
탄센트 함수  (0) 2024.09.09
유리 함수  (0) 2024.09.05
로그 함수  (0) 2024.09.04
사인 함수  (0) 2024.09.03