ic ice buyuyen yildiz
anlamadigim yerleri belirttimunknown
python
a year ago
6.2 kB
26
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