import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
from tkinter import ttk
class TangentPlotterApp:
def __init__(self, root):
self.root = root
self.root.title("탄젠트 함수 그래프")
# 입력 필드 및 레이블
self.label = tk.Label(root, text="그래프의 주기를 조정할 상수를 입력하세요:")
self.label.pack(padx=10, pady=5)
self.period_entry = tk.Entry(root)
self.period_entry.pack(padx=10, pady=5)
# 그래프 업데이트 버튼
self.plot_button = tk.Button(root, text="그래프 그리기", command=self.update_plot)
self.plot_button.pack(padx=10, pady=10)
# Matplotlib 그래프를 표시할 영역
self.fig, self.ax = plt.subplots(figsize=(8, 6))
self.canvas = FigureCanvasTkAgg(self.fig, master=root)
self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
def update_plot(self):
# 주기 상수 입력받기
try:
period = float(self.period_entry.get())
if period <= 0:
raise ValueError("주기는 0보다 커야 합니다.")
except ValueError as e:
tk.messagebox.showerror("입력 오류", f"올바른 주기를 입력하세요: {e}")
return
# 기존 그래프 지우기
self.ax.clear()
# 주기를 조정한 탄젠트 함수
def adjusted_tangent(x, period):
return np.tan((np.pi / period) * x)
# x 값의 범위 설정
x = np.linspace(-3 * period, 3 * period, 1000)
# y 값 계산
y = adjusted_tangent(x, period)
# 그래프 그리기
self.ax.plot(x, y, label=f'$\tan(\\frac{{\pi}}{{{period}}} x)$')
self.ax.set_ylim(-10, 10) # y 축 범위 설정 (너무 큰 값 방지)
self.ax.axhline(0, color='black', linewidth=0.5)
self.ax.axvline(0, color='black', linewidth=0.5)
self.ax.grid(True)
self.ax.set_title(f'주기가 {period}인 탄젠트 함수')
self.ax.set_xlabel('x')
self.ax.set_ylabel('f(x)')
self.ax.legend()
# 그래프 업데이트
self.canvas.draw()
def main():
root = tk.Tk()
app = TangentPlotterApp(root)
root.mainloop()
if __name__ == "__main__":
main()