정보통신기술(ICT)

탄센트 함수

해머슴 2024. 9. 9. 10:14
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()

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

부분 함수  (0) 2024.09.11
무리 함수  (0) 2024.09.10
코사인 함수  (0) 2024.09.06
유리 함수  (0) 2024.09.05
로그 함수  (0) 2024.09.04