정보통신기술(ICT)

차원 방정식 파이썬 코드

해머슴 2024. 11. 25. 10:31
import tkinter as tk
from tkinter import messagebox
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import rc
import platform

# 한글 폰트 설정
if platform.system() == "Windows":
    rc('font', family='Malgun Gothic')  # Windows의 한글 폰트
elif platform.system() == "Darwin":  # macOS
    rc('font', family='AppleGothic')
else:
    rc('font', family='NanumGothic')  # 리눅스용 폰트

plt.rcParams['axes.unicode_minus'] = False  # 마이너스 기호 깨짐 방지


def solve_dimension_equation():
    try:
        # 입력된 값 가져오기
        dimension_value = float(entry_dimension.get())
       
        # 예시 방정식: x^2 + 2x + 1
        # 결과 계산
        result = dimension_value**2 + 2 * dimension_value + 1

        # 결과 표시
        label_result.config(text=f"결과: {result:.2f}")
    except ValueError:
        messagebox.showerror("입력 오류", "숫자를 올바르게 입력하세요.")


def plot_graph():
    try:
        # 그래프를 위한 x 범위 설정
        x = np.linspace(-10, 10, 400)  # -10에서 10까지 400개의 점
        y = x**2 + 2 * x + 1  # 예시 방정식

        # 그래프 그리기
        plt.figure("차원 방정식 그래프")
        plt.plot(x, y, label="y = x^2 + 2x + 1")
        plt.axhline(0, color="black", linewidth=0.5, linestyle="--")  # x축
        plt.axvline(0, color="black", linewidth=0.5, linestyle="--")  # y축
        plt.title("차원 방정식 그래프")
        plt.xlabel("x")
        plt.ylabel("y")
        plt.legend()
        plt.grid(True)
        plt.show()
    except Exception as e:
        messagebox.showerror("그래프 오류", f"그래프를 표시할 수 없습니다: {str(e)}")


# GUI 설정
root = tk.Tk()
root.title("차원 방정식 계산기")

# 입력 필드와 라벨
label_instruction = tk.Label(root, text="숫자를 입력하고 결과를 확인하세요:")
label_instruction.pack(pady=10)

entry_dimension = tk.Entry(root, width=20)
entry_dimension.pack(pady=5)

# 계산 버튼
button_calculate = tk.Button(root, text="계산", command=solve_dimension_equation)
button_calculate.pack(pady=10)

# 그래프 버튼
button_graph = tk.Button(root, text="그래프 보기", command=plot_graph)
button_graph.pack(pady=10)

# 결과 표시 라벨
label_result = tk.Label(root, text="결과: ", font=("Arial", 14))
label_result.pack(pady=10)

# 프로그램 실행
root.mainloop()