🌀 Kodlarla Hipnoz: Newton Spiral Zoom Animasyonu
Matematiksel bir denklemin içine düşseydiniz ne görürdünüz? Bugün Python kullanarak bu sorunun cevabını veriyoruz. Hazırsanız kemerlerinizi bağlayın, sonsuz bir tünele giriyoruz!
Daha önceki yazılarımızda Newton Fraktalı‘nın o akışkan, mermer benzeri yapısını incelemiştik. Bugün ise aynı yapıya “Sinematik Hareket” katıyoruz.
Tünel Etkisi Nasıl Yapılır?
Bu videodaki “içe doğru düşüş” hissini yaratmak için fraktal formülünü değiştirmedik. Bunun yerine Kamerayı (Koordinat Düzlemini) manipüle ettik.
Mantık şu: Her karede resmi biraz küçültüyoruz (Zoom) ve biraz döndürüyoruz (Rotation). Bu işlemi saniyede 30 kez tekrarladığımızda beynimiz bunu bir “tünel yolculuğu” olarak algılıyor.
💻 Kodun Kalbi
Python’da bu etkiyi yaratan sihirli satır şudur:
# Z_base: Ekran Koordinatları
# zoom_factor: Her karede artan yakınlaştırma oranı
# rotation: Karmaşık sayılarda döndürme işlemi
Z = (Z_base / zoom_factor) * rotation
import cv2
import numpy as np
# --- AYARLAR (720p - Hızlı ve Akıcı) ---
width, height = 720, 1280
fps = 30
duration_sec = 15
total_frames = fps * duration_sec
filename = "newton_spiral_zoom.mp4"
try:
fourcc = cv2.VideoWriter_fourcc(*'avc1')
except:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(filename, fourcc, fps, (width, height))
# --- TEMEL KOORDİNATLAR ---
# Burası sabit kalacak, zoom ve dönüşü döngü içinde yapacağız
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"🌀 Spiral Zoom Başlıyor: {filename}")
# --- ANİMASYON DÖNGÜSÜ ---
for i in range(total_frames):
if i % 30 == 0:
print(f"İşleniyor: %{int(i/total_frames*100)}")
# 1. ZOOM EFEKTİ:
# 1.0'dan başlayıp her karede %1 yaklaşıyoruz (Exponential Zoom)
# zoom_factor ne kadar büyürse, görüntü o kadar yakınlaşır.
zoom_factor = 1.0 * (1.01 ** i)
# 2. DÖNME EFEKTİ (ROTATION):
# Her karede açıyı biraz değiştiriyoruz.
angle_rot = -0.5 * np.pi * i / total_frames # Yavaşça saat yönünde dön
# Karmaşık sayılarda dönme işlemi: Z * e^(i*theta)
rotation = np.exp(1j * angle_rot)
# Z_base'i (Ekranı) manipüle ediyoruz:
# Önce küçültüyoruz (Zoom), sonra döndürüyoruz (Rotation)
Z = (Z_base / zoom_factor) * rotation
# Newton Parametresi (Hafif dalgalanma devam etsin)
angle_anim = 2 * np.pi * i / total_frames
A = 1.0 + 0.05 * np.sin(angle_anim)
# --- NEWTON ITERASYONU ---
max_iter = 15
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("🌀 Spiral Video Hazır! 'newton_spiral_zoom.mp4' dosyasını kontrol et.")
🎥 Sonuç: Sonsuz Sarmal
Kod çalıştığında ortaya çıkan görüntü, izleyiciyi ekranın merkezine kilitleyen hipnotik bir sarmaldır. İşte Python ve Matematiğin baş döndürücü işbirliği:
Bu tür “Zoom” videolarında en büyük zorluk, piksellerin bozulmamasıdır. Fraktallar “sonsuz detay” içerdiği için ne kadar yaklaşırsanız yaklaşın görüntü asla bozulmaz, her zaman yeni detaylar ortaya çıkar.