🌻 Doğanın Gizli Yazılımı: Python ile Ayçiçeği Spiralleri Çizmek
Hiç bir ayçiçeğinin göbeğine veya bir kaktüsün dikenlerine dikkatlice baktınız mı? O mükemmel dizilişin tesadüf olduğunu düşünüyorsanız yanılıyorsunuz. Doğa, milyonlarca yıllık evrim sürecinde, tohumları veya yaprakları en verimli şekilde dizebilmek için eşsiz bir matematiksel formül keşfetmiştir.
Bugün, doğanın kullandığı bu “gizli kodu” (Phyllotaxis) Python kullanarak bilgisayarımızda simüle edeceğiz. Sonuç mu? Kelimenin tam anlamıyla hipnotize edici!
Sırrı Çözüyoruz: 137.5 Derece
Bu sarmalın arkasındaki sihirli sayı 137.5 derece, yani Altın Açı‘dır.
Bitkiler, yeni bir tohum veya yaprak çıkarırken bir öncekinden tam olarak bu açı kadar dönerler. Eğer 90 derece dönselerdi “artı” işareti gibi, 180 derece dönselerdi düz bir çizgi gibi dizilirlerdi. Ancak 137.5 derece (Altın Oran’dan gelir), boşlukların en mükemmel şekilde dolmasını sağlar.
Biz de kodumuzda tam olarak bunu yaptık:
- Merkeze bir nokta koy.
- 137.5 derece dön.
- Merkezden biraz uzaklaş ve yeni noktayı koy.
- Bunu binlerce kez tekrarla!
💻 Kodlama Kısmı (Python & OpenCV)
Bu görsel şöleni oluşturmak için karmaşık kütüphanelere ihtiyacımız yok. Sadece matematik (trigonometri) ve görüntü işleme kütüphanesi OpenCV yeterli.
İşte o hipnotik videoyu oluşturan temel algoritma:
import cv2
import numpy as np
import math
# --- AYARLAR (720p HD & 60 FPS) ---
# Geometrik şekillerde 60 FPS çok daha akıcı görünür
width, height = 720, 1280
fps = 60
duration_sec = 15
total_frames = fps * duration_sec
filename = "golden_ratio_spiral.mp4"
try:
fourcc = cv2.VideoWriter_fourcc(*'avc1')
except:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(filename, fourcc, fps, (width, height))
# Siyah Arka Plan (Tuval)
# Her karede ekranı temizlemeyeceğiz, üstüne çizeceğiz (iz bırakarak büyüyecek)
canvas = np.zeros((height, width, 3), dtype=np.uint8)
print(f"🌻 Altın Oran Videosu Hazırlanıyor: {filename}")
print("Bu kod çok hızlı çalışır, arkanıza yaslanın...")
# --- PHYLLOTAXIS PARAMETRELERİ ---
n = 0 # Nokta sayısı sayacı
c = 6 # Ölçek katsayısı (Noktaların ne kadar ayrık olacağı)
total_dots = 4000 # Toplam kaç nokta çizeceğiz?
# Her karede kaç nokta ekleyelim? (Videonun hızını belirler)
dots_per_frame = int(total_dots / total_frames) + 2
# --- ANİMASYON DÖNGÜSÜ ---
for i in range(total_frames):
if i % 100 == 0:
print(f"İşleniyor: %{int(i/total_frames*100)}")
# Bu karede eklenecek noktaları çiz
for _ in range(dots_per_frame):
# 1. ALTIN AÇI FORMÜLÜ:
# Her yeni nokta, bir öncekinden 137.5 derece döner.
# Radyan cinsinden: 137.5 * (pi / 180) ≈ 2.39996
angle = n * 137.508 * (np.pi / 180)
# 2. YARIÇAP FORMÜLÜ:
# Yarıçap, nokta sayısının kareköküyle orantılı büyür (Verimli paketleme)
radius = c * np.sqrt(n)
# 3. KUTUPSAL -> KARTEZYEN KOORDİNAT DÖNÜŞÜMÜ
x = int(radius * np.cos(angle) + width / 2)
y = int(radius * np.sin(angle) + height / 2)
# Ekranda yer kalmadıysa çizme
if 0 <= x < width and 0 <= y < height:
# 4. RENKLENDİRME (HSV):
# Nokta sayısına (n) göre renk değişsin -> Gökkuşağı spirali
# n % 256 ile rengi 0-255 arasında döndürüyoruz
hue = int(n / 5) % 180
color_hsv = np.uint8([[[hue, 255, 255]]])
color_bgr = cv2.cvtColor(color_hsv, cv2.COLOR_HSV2BGR)[0][0]
# BGR formatına çevirip çiziyoruz (int'e çevirmeyi unutma)
cv2.circle(canvas, (x, y), 4, (int(color_bgr[0]), int(color_bgr[1]), int(color_bgr[2])), -1)
n += 1
# Animasyon Efekti:
# Tuvali (canvas) videoya yazıyoruz.
# Her karede tuval biraz daha dolmuş oluyor.
out.write(canvas)
out.release()
print("🌻 Altın Oran hazır! 'golden_ratio_spiral.mp4' dosyasını kontrol et.")
Kodun Mantığı:
Kodun kalbinde iki temel formül yatıyor:
- Açı (Angle):
n * 137.5(Her seferinde dönme miktarı) - Yarıçap (Radius):
c * sqrt(n)(Merkezden uzaklaşma miktarı)
Neden karekök kullandık? Eğer karekök kullanmasaydık, noktalar dışarı doğru gittikçe birbirinden çok ayrılırdı. Karekök sayesinde spirallerin sıklığı merkezde de dışarıda da eşit görünür.
🎥 Sonuç: Matematiğin Dansı
Kodumuzu çalıştırdığımızda, noktaların merkezden patlayarak dışarı doğru rengarenk bir sarmal oluşturduğunu görüyoruz. Renkleri de (HSV renk uzayı kullanarak) noktaların sırasına göre gökkuşağı tonlarında ayarladık.
İşte Python ve Matematiğin ortak yapımı o video:
Kendin Dene!
Bu kodla oynamak çok zevkli. Eğer Python biliyorsanız şunları değiştirerek neler olacağını gözlemleyin:
- Açıyı 137.5 yerine 137.3 yapın. (Sarmalların nasıl kaosa dönüştüğünü göreceksiniz!)
- Renk paletini değiştirin.
Bu 137.5 derecelik açı sadece ayçiçeklerinde değil; çam kozalaklarında, ananasın üzerindeki desenlerde ve hatta bazı deniz kabuklarında bile bulunur. Doğa, “alan optimizasyonu” konusunda dünyanın en iyi yazılımcısıdır!