import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib.widgets import Slider
# Gökdelen Parametreleri
kat_sayisi = 20 # Başlangıçta 20 kat
taban_boyutu = 10 # Başlangıçta 10 birim
tepe_boyutu = 5 # Başlangıçta 5 birim
# 3D Gökdelen Tasarımı
def create_building(kat_sayisi, taban_boyutu, tepe_boyutu):
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# Gökdelenin her bir katını çizmek için döngü
for kat in range(kat_sayisi):
# Kat yüksekliği
z_start = kat
z_end = kat + 1
# Taban ve tepe boyutunu linearly interpolate ediyoruz
current_taban_boyutu = taban_boyutu - (taban_boyutu - tepe_boyutu) * kat / (kat_sayisi - 1)
next_taban_boyutu = taban_boyutu - (taban_boyutu - tepe_boyutu) * (kat + 1) / (kat_sayisi - 1)
# Katın üst ve alt köşelerinin koordinatlarını hesapla
x = np.array([current_taban_boyutu, -current_taban_boyutu, -current_taban_boyutu, current_taban_boyutu])
y = np.array([current_taban_boyutu, current_taban_boyutu, -current_taban_boyutu, -current_taban_boyutu])
# Bu koordinatları 3D'ye aktar
x_next = np.array([next_taban_boyutu, -next_taban_boyutu, -next_taban_boyutu, next_taban_boyutu])
y_next = np.array([next_taban_boyutu, next_taban_boyutu, -next_taban_boyutu, -next_taban_boyutu])
ax.plot_trisurf(x, y, np.full_like(x, z_start), color='blue', alpha=0.7)
ax.plot_trisurf(x_next, y_next, np.full_like(x, z_end), color='blue', alpha=0.7)
ax.set_xlabel('X Koordinatı')
ax.set_ylabel('Y Koordinatı')
ax.set_zlabel('Z (Kat Yüksekliği)')
ax.set_title('Dinamik Gökdelen Tasarımı')
plt.show()
# Slayder Fonksiyonları
def update(val):
global kat_sayisi, taban_boyutu, tepe_boyutu
kat_sayisi = slider_kat.val
taban_boyutu = slider_taban.val
tepe_boyutu = slider_tepe.val
create_building(int(kat_sayisi), taban_boyutu, tepe_boyutu)
# Figür ve Slayderlar
fig, ax = plt.subplots(figsize=(10, 5))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.3)
# Kat Sayısı Slayderı
ax_kat = plt.axes([0.1, 0.05, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider_kat = Slider(ax_kat, 'Kat Sayısı', 1, 200, valinit=20, valstep=1)
slider_kat.on_changed(update)
# Taban Boyutu Slayderı
ax_taban = plt.axes([0.1, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider_taban = Slider(ax_taban, 'Taban Boyutu', 1, 20, valinit=10, valstep=0.5)
slider_taban.on_changed(update)
# Tepe Boyutu Slayderı
ax_tepe = plt.axes([0.1, 0.15, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider_tepe = Slider(ax_tepe, 'Tepe Boyutu', 1, 20, valinit=5, valstep=0.5)
slider_tepe.on_changed(update)
# İlk tasarımı çiz
create_building(int(slider_kat.val), slider_taban.val, slider_tepe.val)
plt.show()