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:
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.