Kodlarla Ebru Sanatı: Newton Fraktalı ve Renklerin Dansı

Matematik her zaman katı kurallar ve siyah-beyaz denklemlerden ibaret değildir. Bazen, sayıların yolculuğunu izlediğimizde karşımıza Ebru sanatını andıran, rengarenk ve akışkan eserler çıkar.

Bugün kodlayacağımız Newton Fraktalı, diğerlerinin aksine “kaos” değil, “çözüm” arayan bir yapı. Bu yüzden izlemesi inanılmaz derecede rahatlatıcı ve hipnotik!

Kaçış Değil, Varış Hikayesi

Meşhur Mandelbrot kümesi, sonsuzluğa kaçan sayıları gösterir. Newton fraktalı ise bir denklemin (örneğin z³ - 1 = 0) kökünü bulmaya çalışan sayıları simüle eder.

Her nokta, hangi köke daha yakınsa o kökün rengini alır. Sınır bölgelerindeki noktalar ise “hangi köke gitsem?” diye kararsız kaldığı için o muazzam karmaşık desenleri oluşturur.

💻 Kodlama ve Renklerin Sırrı

Bu videoda gördüğünüz o pürüzsüz, gökkuşağı gibi geçişleri sağlamak için standart RGB yerine HSV (Hue-Saturation-Value) renk uzayını kullandık. Sayıların “açısına” göre renk atadık.

# Newton Iterasyonu (Kök Bulma Döngüsü)
# Formül: z = z - A * (f(z) / f'(z))

for _ in range(max_iter):
    denominator = 3 * Z**2 + 1e-6 
    Z = Z - A * (Z**3 - 1) / denominator
    
import cv2
import numpy as np

# --- HIZLANDIRILMIŞ AYARLAR (720p HD & 30 FPS) ---
# Çözünürlüğü düşürdük (Hız için en büyük etken)
width, height = 720, 1280
# Kare hızını 60'tan 30'a düşürdük (İş yükü yarıya indi)
fps = 30
duration_sec = 15
total_frames = fps * duration_sec
filename = "newton_marble_fast_720p.mp4"

# Codec Ayarı
try:
    fourcc = cv2.VideoWriter_fourcc(*'avc1')
except:
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')

out = cv2.VideoWriter(filename, fourcc, fps, (width, height))

# --- KOORDİNAT SİSTEMİ ---
x = np.linspace(-1.5, 1.5, width)
aspect_ratio = height / width
y = np.linspace(-1.5 * aspect_ratio, 1.5 * aspect_ratio, height)
X, Y = np.meshgrid(x, y)
Z_base = X + 1j * Y

print(f"🚀 Hızlı Render Başlıyor: {filename}")
print(f"Ayarlar: 720p HD @ 30 FPS (Toplam {total_frames} kare)")

# --- ANİMASYON DÖNGÜSÜ ---
for i in range(total_frames):
    if i % 50 == 0: # Daha sık bilgi versin
        print(f"İşleniyor: %{int(i/total_frames*100)}")

    angle = 2 * np.pi * i / total_frames
    A = 1.0 + 0.05 * np.sin(angle) + 1j * 0.05 * np.cos(angle)

    Z = Z_base.copy()
    # Hız için iterasyonu da biraz kıstık (20 -> 15)
    max_iter = 15

    # --- NEWTON İTERASYONU (İşlemciyi yoran kısım) ---
    for _ in range(max_iter):
        denominator = 3 * Z**2 + 1e-6 
        Z = Z - A * (Z**3 - 1) / denominator

    # --- GÖRSELLEŞTİRME (HSV) ---
    angle_z = np.angle(Z)
    hue = (angle_z + np.pi) / (2 * np.pi) * 179
    saturation = np.ones_like(hue) * 255
    value = np.ones_like(hue) * 200
    
    hsv_img = np.dstack((hue, saturation, value)).astype(np.uint8)
    colored_frame = cv2.cvtColor(hsv_img, cv2.COLOR_HSV2BGR)

    out.write(colored_frame)

out.release()
print("✅ Hızlı video tamamlandı! 'newton_marble_fast_720p.mp4' dosyasını kontrol et.")

🎥 Sonuç: Eriyen Mermer Efekti

Bu kodun çıktısı, sert köşeler yerine sanki suyun üzerine damlatılmış boyalar gibi akışkan bir görüntü sunar. İşte Python ve Matematiğin en renkli işbirliği:

💡 Bilişimci Notu:

Bu videodaki “erime” efekti, Newton formülündeki sabit bir sayıyı (A parametresi) her karede çok az değiştirerek elde edilmiştir. Bu sayede statik bir resim yerine “nefes alan” bir animasyon ortaya çıkmıştır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir