Büyüyen Kare-Dikdörtgen

 avatar
unknown
plain_text
8 months ago
4.2 kB
7
Indexable
import cv2
import numpy as np
import time  # Zamanı ölçmek için gerekli

def buyuyen_sekil(sekil_turu, genisleme_hizi, sure):
    
    # genişleme hızı ve süre min max ile gösterimi
    # def buyuyen_sekil(sekil_turu, genisleme_hizi=500, sure=45):
        # genisleme_hizi değerini 100 ile 1000 arasında sınırla
        #genisleme_hizi = max(100, min(genisleme_hizi, 1000))  
        # sure değerini 60 ile 300 saniye arasında sınırla
        #sure = max(1*60, min(sure, 5 * 60))  
    
    if not 100 <= genisleme_hizi <= 1000:
        genisleme_hizi = 500 
        #TEST ICIN print("genisleme_hizi, 100 ile 1000 arasında olmalıdır. Varsayılan 500 ms kullanılıyor.")
    
    
    if not 60 <= sure <= 5*60:
        sure = 45
        #TEST ICIN print("sure, 1 dakika (60 saniye) ile 5 dakika (300 saniye) arasında olmalıdır. Varsayılan 45 saniye kullanılıyor.")
    
    # Canvas boyutları ve merkez noktası
    canvas_x = 500
    canvas_y = 500
    center_x = canvas_x // 2
    center_y = canvas_y // 2

    # Renkler ve yarıçaplar
    center_color = (169, 169, 169)
    center_radius = 7
    shape_color = (104, 104, 104)
    corner_color = (0, 36, 255)
    corner_radius = 10
 
    # Beyaz tuval
    canvas = np.ones((canvas_y,canvas_x, 3), dtype="uint8") * 255
    
    baslangic_zamani = time.time()  # Başlangıç zamanı kaydedilir. Program çalışmaya başladıktan itibaren ne kadar süre geçti?
    
    while time.time() - baslangic_zamani < sure:  # Yeniden çağrıldı time ve tekrar süre alındı.Süre dolmamışsa döngü devam etti
        size = 50 #kenar ölçüsü
        max_size = min(canvas_x, canvas_y)-50   # Şeklin büyüyebileceği max uzunluk(Sınıra dayanmasın şık dursun diye -50)
        while size <= max_size:
            canvas.fill(255)  # Tuvali temizle (beyaza boya)

            # Ortada daire çiz
            cv2.circle(canvas, (center_x, center_y), center_radius, center_color, -1)

            # Kare/dikdörtgen çiz
            current_size = size
            while current_size >= 50:
                if sekil_turu == 'kare':
                    top_left = (center_x - current_size // 2, center_y - current_size // 2) #üst sol koordinat(225,225) x=50,y=50
                    bottom_right = (center_x + current_size // 2, center_y + current_size // 2) # alt sağ koordinat(275,275)
                elif sekil_turu == 'dikdortgen':
                    top_left = (center_x - current_size // 2, center_y - int(current_size * 0.3)) #(225,235) x=50,y=30
                    bottom_right = (top_left[0] + current_size, top_left[1] + int(current_size * 0.6)) #(275,265)
                    
                cv2.rectangle(canvas, top_left, bottom_right, shape_color, 3)#2 sefer yazmamak için döngü dışına alındı
                
                current_size -= 50
            
            # En son karenin/dikdörtgenin köşelerini işaretle
            if sekil_turu == 'kare':
                top_left = (center_x - size // 2, center_y - size // 2)
                bottom_right = (center_x + size // 2, center_y + size // 2)
            elif sekil_turu == 'dikdortgen':
                top_left = (center_x - size // 2, center_y - int(size * 0.3))
                bottom_right = (top_left[0] + size, top_left[1] + int(size * 0.6)) 
            
            corners = [top_left, (top_left[0], bottom_right[1]), (bottom_right[0], top_left[1]), bottom_right]
            for corner in corners:
                cv2.circle(canvas, corner, corner_radius, corner_color, -1) #4 sefer yazmamak için for a alındı

            cv2.imshow("Buyuyen Sekil", canvas)
            if cv2.waitKey(genisleme_hizi) & 0xFF == 27:  # ESC tuşuna basılarak çıkılabilir
                cv2.destroyAllWindows()
                return

            size += 50

    cv2.destroyAllWindows()

# Fonksiyonu çağırma
buyuyen_sekil(sekil_turu='kare', genisleme_hizi=1000, sure=60)  # Kare çizimi için
buyuyen_sekil(sekil_turu='dikdortgen', genisleme_hizi=100, sure=300)  # Dikdörtgen çizimi için
Editor is loading...
Leave a Comment