1. Nedir Bu “Yanan Gemi”?
Burning Ship, aslında meşhur Mandelbrot Kümesi’nin “asi kardeşi”dir. 1992 yılında Michael Michelitsch ve Otto E. Rössler tarafından tanımlanmıştır. Mandelbrot kümesi yumuşak ve simetrik hatlara sahipken, Burning Ship keskin, köşeli ve sanki “yanmış” veya “hasar görmüş” gotik bir mimariyi andırır. İsmini, şeklin sol tarafındaki ana yapının, yelkenleri yanan bir kalyona benzemesinden alır.
2. Matematiksel Sırrı (Mutlak Değer Farkı)
Mandelbrot ile formülü neredeyse aynıdır, tek bir farkla: Mutlak Değer.
- Standart Mandelbrot:
Z = Z² + c - Burning Ship:
Z = (|Re(Z)| + i|Im(Z)|)² + c
Yani karmaşık sayının karesini almadan önce, hem Gerçel (Real) hem de Sanal (Imaginary) kısımlarının mutlak değerini alıyoruz. Bu işlem, koordinat düzlemindeki negatif bölgeleri pozitife katlar. Bu “katlama” işlemi, fraktalın o meşhur keskin kırıklarını ve “yanık” izlerini oluşturur.
3. Kodlamadaki Kritik Nokta (Python & OpenCV)
Bu görüntüyü oluştururken Python’da şu matematiksel hileyi kullandık:
# Burning Ship'in kalbi burasıdır: # np.abs() fonksiyonu ile negatifleri pozitife çeviriyoruz real_part = np.abs(Z[mask].real) imag_part = np.abs(Z[mask].imag) Z[mask] = (real_part + 1j * imag_part)**2 + c
import cv2
import numpy as np
# --- YÜKSEK KALİTE AYARLARI (1080p & 60 FPS) ---
width, height = 1080, 1920
fps = 60
duration_sec = 15
total_frames = fps * duration_sec
filename = "burning_ship_hd.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İ ---
# Burning Ship için biraz daha geniş bir alana (zoom-out) ihtiyacımız olabilir
x = np.linspace(-1.8, 1.8, width)
aspect_ratio = height / width
y = np.linspace(-1.8 * aspect_ratio, 1.8 * aspect_ratio, height)
X, Y = np.meshgrid(x, y)
Z_base = X + 1j * Y
print(f"🔥 Burning Ship Videosu Hazırlanıyor: {filename}")
print(f"Çözünürlük: {width}x{height} | FPS: {fps}")
print("Bu işlem yüksek kalite nedeniyle 2-4 dakika sürebilir, lütfen bekleyin...")
# --- ANİMASYON DÖNGÜSÜ ---
for i in range(total_frames):
if i % 50 == 0:
print(f"İşleniyor: %{int(i/total_frames*100)}")
# Parametre Değişimi
# Burning Ship'te 'c' parametresi çok hassastır, daha küçük bir çemberde döndürüyoruz
angle = 2 * np.pi * i / total_frames
# Koordinatları biraz kaydırarak geminin "yüzüyormuş" gibi görünmesini sağlıyoruz
c = -1.75 + 0.03 * np.exp(1j * angle)
Z = Z_base.copy()
img_data = np.zeros(Z.shape, dtype=float)
max_iter = 40 # Burning ship çok karmaşık olduğu için iterasyonu az tutabiliriz
# --- BURNING SHIP FORMÜLÜ ---
# Normal Julia: Z = Z^2 + c
# Burning Ship: Z = (|Re(Z)| + i|Im(Z|)^2 + c
# Mutlak değer (abs) kullanımı o "keskin/yanık" kenarları oluşturur.
for _ in range(max_iter):
mask = np.abs(Z) <= 4 # Taşanları 4'te yakalıyoruz
# Matematiksel Sihir Burada:
# Gerçel ve Sanal kısımların mutlak değerini alıyoruz
real_part = np.abs(Z[mask].real)
imag_part = np.abs(Z[mask].imag)
Z[mask] = (real_part + 1j * imag_part)**2 + c
img_data[mask] += 1
# --- GÖRSELLEŞTİRME ---
# Logaritmik yumuşatma
img_norm = np.log(img_data + 1) / np.log(max_iter) * 255
img_uint8 = img_norm.astype(np.uint8)
# Renk Paleti: INFERNO (Siyah -> Kırmızı -> Sarı -> Beyaz)
# Tam "yanma" efekti verir.
colored_frame = cv2.applyColorMap(img_uint8, cv2.COLORMAP_INFERNO)
out.write(colored_frame)
out.release()
print("🔥 Video bitti! 'burning_ship_hd.mp4' dosyasını kontrol et.")
4. Renk Paleti Tercihi
Bu videoda atmosferi desteklemek için OpenCV’nin INFERNO (Cehennem) renk haritası (cv2.COLORMAP_INFERNO) kullanıldı. Bu palet, siyah zemin üzerine koyu mor, kırmızı ve sarı tonlarını kullanarak tam bir “yangın” efekti yaratır.
5. Anahtar Kelimeler
Burning Ship Fractal Chaos Theory Python Art OpenCV Inferno Complex Numbers
🎥 Sonuç: Kaosun Estetiği
Kodumuzu çalıştırdığımızda ortaya çıkan görüntü, standart fraktalların aksine yumuşak değil; köşeli, agresif ve son derece etkileyicidir. İşte Python ile oluşturduğumuz o ateşli simülasyon: