ic ice buyuyen yildiz

anlamadigim yerleri belirttim
 avatar
unknown
python
a year ago
6.2 kB
6
Indexable
import cv2
import numpy as np
import time

def ic_ice_yildizlar_ciz(genisleme_suresi, sure):
    dis_yaricap_baslangic = 30 #ilk yildizin dis yaricapi
    ic_yaricap_baslangic = 12 #ilk yildizin ic yaricapı
    dis_yaricap_adimlar = 40 # her adimda buyuyecek dis yaricap
    ic_yaricap_adimlar = 22 # her adimda buyuyecek ic yaricap
    max_dis_yaricap = 240 # en sonki yildizin dis yaricapi
    max_ic_yaricap = 300 # en sonki yildizin ic yaricapi
        
    canvas_h = 500  # yükseklik
    canvas_w = 500  # genişlik

    if not 100 <= genisleme_suresi <= 1000: # her adimda yildizlar buyurken ki suresi 100 ms ve 1000 ms arası olabilir
        genisleme_suresi = 500
        ## TEST print("genisleme_hizi, 100 ile 1000 arasında olmalıdır. Varsayılan 500 ms kullanılıyor.")

    if not 60 <= sure <= 5 * 60: # bu egzersizin ne kadar devam edecegini hesaplar bu sure 1 dk ve 5 dk arasındadır.
        sure = 45
        print("sure, 1 dakika (60 saniye) ile 5 dakika (300 saniye) arasında olmalıdır. Varsayılan 45 saniye kullanılıyor.")

    merkez_x = canvas_w // 2 #yuvarlagin yaricapi x koordinatinin ortasinda olacak
    merkez_y = canvas_h // 2 #yuvarlagin yaricapi y koordinatinin ortasinda olacak

    image = np.zeros((canvas_h, canvas_w, 3), dtype=np.uint8) + 255  # beyaz boş canvas

    radius = 7  # yuvarlağın yarıçapı
    color_circle = (170, 170, 170)  # yuvarlağın rengi
    thickness_circle = -1  # İçi dolu yuvarlak

    cv2.circle(image, (merkez_x, merkez_y), radius, color_circle, thickness_circle)  # yuvarlak oluşturuldu.

    color_star = (125, 81, 74)  # yıldız rengi
    thickness_star = 3  # yıldız kalınlığı

    start_time = time.time()  # programı başlat ve kaydet
    elapsed_time = 0 # gecen zamani hesaplama, zaman 0 ile basliyor

    while elapsed_time < sure: # toplam sure dolana kadar
        dis_yaricap = dis_yaricap_baslangic # her döngü basında dic yaricapi tekrar baslat
        ic_yaricap = ic_yaricap_baslangic #her döngü basinda ic yarişcapi tekrar baslat
        last_points = None #döngüyü sıfırla

        while dis_yaricap <= max_dis_yaricap and ic_yaricap <= max_ic_yaricap and elapsed_time < sure: #yildizlar max yaricapa ulasana kadar ve sure dolana kadar devam et
            image2 = image.copy()  # Her döngüde yeni bir image2 oluştur

            # döngü her baslandiginda sabit olarak yildizlarin baslangic noktalari ayarlanir.
            mevcut_dis_yaricap = dis_yaricap_baslangic
            mevcut_ic_yaricap = ic_yaricap_baslangic
            
            # mevcut ic yaricap ve mevcut dis yaricap; ic yaricap ve dis yaricapa esit veya kucuk olana kadar:
            #BU WHİLE DONGUSUNU TAMAMEN ANLAMADIM
            while mevcut_dis_yaricap <= dis_yaricap and mevcut_ic_yaricap <= ic_yaricap: 
                
                #yildizin kose noktalari icin bos liste
                points = [] 
                for i in range(10): #yildizin 10 kose noktasini (5 ic,5 dis) hesaplar.
                    #i * np.pi / 5, her köşe için açıyı 36 derece artırır (360 derece / 10 köşe). - np.pi / 2 ifadesi yıldızı dikey olarak hizalar.
                    angle = i * np.pi / 5 - np.pi / 2
                    
                    if i % 2 == 0: #i cift sayi ise
                        #köşe noktasının x ve y koordinatlarını hesapla.
                        x = int(merkez_x + mevcut_dis_yaricap * np.cos(angle))
                        
                        # trigonometri kullanarak köşenin merkezden uzaklığını belirle.
                        y = int(merkez_y + mevcut_dis_yaricap * np.sin(angle))
                    else: #eğer tek sayi ise
                        #kullanarak köşe noktasının x ve y koordinatlarını hesapla
                        x = int(merkez_x + mevcut_ic_yaricap * np.cos(angle))  
                        #trigonometri kullanarak köşenin merkezden uzaklığını belirle
                        y = int(merkez_y + mevcut_ic_yaricap * np.sin(angle)) 
                       
                    points.append((x, y)) #hesaplanan köseleri points listesisine ekle

                #BURADAN 
                points = np.array(points, np.int32) 
                
                #points listesini Numpy dizisine dönüştürmek daha hızlı ve verimli hespalamalar yapmamizi saglar
                points = points.reshape((-1, 1, 2)) 
                #point listesindeki noktalari kullanarak yildiz cizer
                cv2.polylines(image2, [points], isClosed=True, color=color_star, thickness=thickness_star)
                #son yildizin köse noktalarina cizmesi icin
                last_points = points #buraya kadar anlamadim
                
                #her adimda ic ve dis yari capi arttir
                mevcut_dis_yaricap += dis_yaricap_adimlar
                mevcut_ic_yaricap += ic_yaricap_adimlar

            if last_points is not None: #last_points'in boş olup olup olmadigini kontrol ediyoruz.
                for point in last_points: # köse noktalarini tek tek isler 
                    #belirtilen koordinatlarda yuvarlaklar cizer
                    cv2.circle(image2, (point[0][0], point[0][1]), 3, color_circle, thickness_circle) 

            cv2.imshow("Buyuyen_Yildizlar", image2) #resmi goster
            if cv2.waitKey(genisleme_suresi) & 0xFF == 27: #ESC tusuna basinca kapat
                cv1.destroyAllWindows() #ESC tusuna basinca butun pencereleri kapat
                return

            dis_yaricap += dis_yaricap_adimlar #dis yaricapi, dis yaricap adimlar kadar büyüt
            ic_yaricap += ic_yaricap_adimlar #ic yaricapi, ic yaricap adimlar kadar büyüt

            elapsed_time = time.time() - start_time #dakika bitinceye kadar calistir

        elapsed_time = time.time() - start_time #toplam gecen sureyi gunceller ve tekrar donguyu baslatir.

    cv2.waitKey(0) # penecereleri tusla kapatir
    cv2.destroyAllWindows() # tum pencereleri kapatir

# Fonksiyonu çağır
ic_ice_yildizlar_ciz(genisleme_suresi=500, sure=60)
Editor is loading...
Leave a Comment