from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QLineEdit, QComboBox, QHBoxLayout, QTextEdit
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
class TrianglePlot(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.triangle_list = []
def initUI(self):
layout = QVBoxLayout()
input_layout = QHBoxLayout()
self.base_input = QLineEdit()
self.base_input.setPlaceholderText("Taban Uzunluğu")
input_layout.addWidget(QLabel("Taban:"))
input_layout.addWidget(self.base_input)
self.left_input = QLineEdit()
self.left_input.setPlaceholderText("Sol Kenar Uzunluğu")
input_layout.addWidget(QLabel("Sol Kenar:"))
input_layout.addWidget(self.left_input)
self.right_input = QLineEdit()
self.right_input.setPlaceholderText("Sağ Kenar Uzunluğu")
input_layout.addWidget(QLabel("Sağ Kenar:"))
input_layout.addWidget(self.right_input)
self.color_input = QComboBox()
self.color_input.addItems(["red", "orange", "yellow", "green", "blue", "purple", "black"])
input_layout.addWidget(QLabel("Renk:"))
input_layout.addWidget(self.color_input)
layout.addLayout(input_layout)
self.canvas = FigureCanvas(plt.figure(figsize=(8, 8)))
layout.addWidget(self.canvas)
self.button = QPushButton("Üçgen Ekle")
self.button.clicked.connect(self.add_triangle)
layout.addWidget(self.button)
self.clear_button = QPushButton("Temizle")
self.clear_button.clicked.connect(self.clear_triangles)
layout.addWidget(self.clear_button)
self.angle_text = QTextEdit()
self.angle_text.setReadOnly(True)
layout.addWidget(QLabel("Üçgen Açılarının Trigonometrik Fonksiyonları:"))
layout.addWidget(self.angle_text)
self.setLayout(layout)
def add_triangle(self):
base = float(self.base_input.text())
left = float(self.left_input.text())
right = float(self.right_input.text())
color = self.color_input.currentText()
A = (0, 0)
B = (base, 0)
cos_C = (left**2 + right**2 - base**2) / (2 * left * right)
angle_C = np.degrees(np.arccos(cos_C))
C_x = right * np.cos(np.radians(angle_C))
C_y = right * np.sin(np.radians(angle_C))
C = (C_x, C_y)
cos_A = (base**2 + right**2 - left**2) / (2 * base * right)
angle_A = np.degrees(np.arccos(cos_A))
cos_B = (base**2 + left**2 - right**2) / (2 * base * left)
angle_B = np.degrees(np.arccos(cos_B))
self.triangle_list.append((A, B, C, color, angle_A, angle_B, angle_C))
self.draw_triangles()
def draw_triangles(self):
self.canvas.figure.clear()
ax = self.canvas.figure.add_subplot(111)
ax.axhline(0, color='black', linewidth=2)
ax.axvline(0, color='black', linewidth=2)
max_x = 0
min_x = 0
max_y = 0
min_y = 0
self.angle_text.clear()
for A, B, C, color, angle_A, angle_B, angle_C in self.triangle_list:
ax.plot([A[0], B[0]], [A[1], B[1]], marker='o', color=color, linewidth=2)
ax.plot([B[0], C[0]], [B[1], C[1]], marker='o', color=color, linewidth=2)
ax.plot([C[0], A[0]], [C[1], A[1]], marker='o', color=color, linewidth=2)
ax.text(A[0], A[1], f'({A[0]:.2f}, {A[1]:.2f})', fontsize=8, color=color)
ax.text(B[0], B[1], f'({B[0]:.2f}, {B[1]:.2f})', fontsize=8, color=color)
ax.text(C[0], C[1], f'({C[0]:.2f}, {C[1]:.2f})', fontsize=8, color=color)
max_x = max(max_x, A[0], B[0], C[0])
min_x = min(min_x, A[0], B[0], C[0])
max_y = max(max_y, A[1], B[1], C[1])
min_y = min(min_y, A[1], B[1], C[1])
self.angle_text.append(f'Üçgen Açılar: A: {angle_A:.2f}°, B: {angle_B:.2f}°, C: {angle_C:.2f}°')
self.angle_text.append(f'Sinüs: sin(A)={np.sin(np.radians(angle_A)):.2f}, sin(B)={np.sin(np.radians(angle_B)):.2f}, sin(C)={np.sin(np.radians(angle_C)):.2f}')
self.angle_text.append(f'Kosinüs: cos(A)={np.cos(np.radians(angle_A)):.2f}, cos(B)={np.cos(np.radians(angle_B)):.2f}, cos(C)={np.cos(np.radians(angle_C)):.2f}')
self.angle_text.append("---------------------------")
ax.set_xlim(min_x - 5, max_x + 5)
ax.set_ylim(min_y - 5, max_y + 5)
ax.set_aspect('equal')
self.canvas.draw()
def clear_triangles(self):
self.triangle_list = []
self.draw_triangles()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Dinamik Üçgen Çizici")
self.setGeometry(100, 100, 900, 900)
self.trianglePlot = TrianglePlot()
self.setCentralWidget(self.trianglePlot)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()