Resim

Python ve Matplotlib ile Türk Bayrağı Çizimi

Python ve Matplotlib ile Türk Bayrağı Çizimi

Bu projeyi tamamladığınızda, Python'ın bilimsel çizim ve veri görselleştirme kütüphanesi olan matplotlib'i ve matematiksel işlemleri yöneten numpy'ı, gerçek dünya standartlarını uygulamak için nasıl kullanacağınızı öğrenmiş olacaksınız.

Kodumuz, bayrağın tüm unsurlarını (Hilal, Ay ve Yıldız) oranlayarak çizecek. Hazırsanız, milli sembolümüzü bilimsel bir titizlikle kodlamaya başlayalım!


💻 Python Kodu: Oranlara Uygun Bayrak Çizimi

Bu projeyi çalıştırabilmek için matplotlib ve numpy kütüphanelerinin kurulu olması gerekir:

pip install matplotlib numpy

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

# Tüm oranlar G (genişlik) birimi üzerinden hesaplanır.
G = 1.0  # Bayrağın genişliği (Yüksekliği)
A = 0.5 * G         # Ay dış merkezinin kaçak kenar uzaklığı
B = 0.5 * G         # Ay dış dairesinin çapı
C = 0.0625 * G      # Ay iç ve dış merkezler arası
D = 0.4 * G         # Ay iç dairesinin çapı
E = (1/3) * G       # Yıldız dairesinin ay iç dairesinden uzaklığı
F = 0.25 * G        # Yıldız dairesinin çapı
L = 1.5 * G         # Bayrağın boyu (uzunluk)
M = (1/30) * G      # kaçak kenar genişliği
def draw_star(center_x, center_y, radius, rotation_angle=0):
    coords = []
    # Yıldızın iç ve dış yarıçaplarını hesapla
    r_outer = radius
    #Yıldızın matematiksel oranı
    r_inner = radius * np.sin(np.deg2rad(18)) / np.sin(np.deg2rad(126))
    for i in range(10):
        # Açıları derece cinsinden 90 dereceden başlatıp 36 derece artırıyoruz.
        angle = np.deg2rad(90 + i * 36 + rotation_angle)        
        # Tek (0, 2, 4...) köşeler dış yarıçap, çift (1, 3, 5...) köşeler iç yarıçap kullanır.
        r = r_outer if i % 2 == 0 else r_inner
        coords.append((center_x + r * np.cos(angle), center_y + r * np.sin(angle)))    
    return patches.Polygon(coords, closed=True, color ="white")
def draw_flag():
    # Matplotlib figür ve eksen ayarları
    fig, ax = plt.subplots()
    ax.set_aspect('equal') # Oranları korumak için önemlidir
    ax.set_xlim(0, L) # Bayrak boyuna göre x ekseni
    ax.set_ylim(0, G) # Bayrak genişliğine göre y ekseni
    ax.axis('off') # Eksen çizgilerini ve etiketlerini gizle
    # Kırmızı Zemin
    ax.add_patch(patches.Rectangle((0, 0), L, G, color='#E30a17'))
    # Hilal (Ay) Konumları ve Yarıçapları
    # (M + A): kaçak kenar genişliği + Ay'ın dış merkezinin kaçak kenar uzaklığı
    outer_center = (M + A, G / 2)
    outer_r = B / 2 # Dış daire yarıçapı
    # İç daire merkezi, dış daire merkezinden C kadar kayıktır.
    inner_center = (outer_center[0] + C, G / 2)
    inner_r = D / 2 # İç daire yarıçapı 
    # 1. Beyaz Daire (Hilalin ana kısmı)
    ax.add_patch(patches.Circle(outer_center, outer_r, color="white"))
    # 2. Kırmızı Daire (Hilali oluşturan kesik kısım)
    ax.add_patch(patches.Circle(inner_center, inner_r, color='#E30a17'))
    # Yıldızın Konumlandırılması
    # E: Ay iç dairesi ile yıldız dairesi arasındaki uzaklık
    # F/6: Yıldızın yatay konumunun ince ayarı
    star_center = (inner_center[0] + E + F / 6, G / 2)
    star_rotation_angle = -40 # Yıldızın doğru açıda durması için döndürme    
    # Yıldızı çiz ve ekle
    star = draw_star(star_center[0], star_center[1], F / 2, star_rotation_angle)
    ax.add_patch(star)
    plt.show()
# Programı başlat
if __name__ == "__main__":
    draw_flag()

📝 Kodun Adım Adım Açıklaması

Bu proje, bir mühendislik projesi gibi düşünülebilir; önce tüm boyutları tanımladık, ardından bu boyutlara göre geometrik şekilleri yerleştirdik.

Adım 1: Oranları Tanımlama (Türk Bayrağı Kanunu)

G = 1.0
A = 0.5 * G
# ...
L = 1.5 * G
  • Boyutlandırma Temeli (G): Türk Bayrağı, genişliği (yüksekliği) G kabul edilerek oranlanır. Biz G=1.0 kabul ettik, bu da tüm diğer boyutları nin bir katı olarak hesaplamamızı sağlar. Örneğin, Bayrağın Boyu (L) daima 1.5 katıdır.

  • Oran Sabitleri: A, B, C, D, E, F ve M gibi değişkenler, kanunda belirtilen geometrik ölçülerdir. Örneğin Ay Dış Dairesinin Çapı (B), bayrak genişliğinin yarısıdır (0.5 \times G).

Adım 2: Yıldız Çizim Fonksiyonu (draw_star)

def draw_star(center_x, center_y, radius, rotation_angle=0):
    # ...
    r = r_outer if i % 2 == 0 else r_inner
    # ...
  • Matematiksel Titizlik: Yıldız çizimi projenin en teknik kısmıdır. 5 köşeli bir yıldızın kenarları ve iç girintileri arasında matematiksel bir oran vardır.

  • r_inner Hesaplaması: Kodunuz, yıldızın iç yarıçapını (r_inner), dış yarıçapına (r_outer) bağlı olarak trigonometrik fonksiyonlarla (np.sin ve np.deg2rad) doğru bir şekilde hesaplar.

  • coords Listesi: Yıldızın 10 köşesinin (5 dış, 5 iç) koordinatları, bir for döngüsü içinde hesaplanır. Bu koordinatlar, matplotlib.patches.Polygon fonksiyonuna aktarılır.

Adım 3: Matplotlib Tuvalini Oluşturma

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.set_xlim(0, L)
ax.set_ylim(0, G)
ax.axis('off')
  • fig, ax = plt.subplots(): Bir çizim alanı (fig) ve bu alan üzerindeki eksenleri (ax) oluştururuz.

  • ax.set_aspect('equal'): En kritik ayar! Bu komut, x ve y eksenlerinin ölçeğinin birebir aynı olmasını sağlar. Bu sayede daireler gerçekten daire, oranlar da doğru kalır.

  • ax.set_xlim ve ax.set_ylim: Eksen sınırlarını bayrağın gerçek boy ve genişlik oranlarına göre (L ve G) ayarlarız.

Adım 4: Bayrağın Parçalarını Yerleştirme

A. Kırmızı Zemin

ax.add_patch(patches.Rectangle((0,0), L, G, color='#E30a17')) ile 0,0 noktasından başlayarak L boyunda ve G genişliğinde kırmızı bir zemin çizilir.

B. Hilal (İki Daire Tekniği)

  • Büyük Daire: İlk olarak, outer_center (dış merkez) konumuna beyaz bir daire çizilir.

  • Küçük Daire: Hemen ardından, inner_center (iç merkez) konumuna arka plan rengiyle (kırmızı) bir daire çizilir. Bu, beyaz daireyi keserek net bir hilal formu oluşturur.

C. Yıldızın Konumlandırılması

star_center değişkeni, hilale göre resmi kanundaki E ve F oranları dikkate alınarak hesaplanır ve draw_star fonksiyonuna gönderilir. Yıldız, doğru optik duruşu sağlamak için -40 derecelik bir açıyla döndürülür.

📹ÖĞRENDİKLERİNİZİ PEKİŞTİRİN:
Hemen aşağıdaki videomuza tıklayın. Adım adım ilerleyerek öğrendiklerinizi görsel olarak pekiştirin .




Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?