Untitled
unknown
plain_text
a year ago
5.7 kB
8
Indexable
import cv2
import numpy as np
import math #Matematiksel işlemler için standart Python kütüphanesi.
def create_canvas():
return np.ones((500, 500, 3), dtype="uint8") * 255 # Beyaz bir tuval oluşturma
def draw_center_circle(canvas, center, radius=10):
cv2.circle(canvas, center, radius, (0, 0, 0), -1) # Daire oluşturma
def is_point_within_canvas(point, canvas):
return 0 <= point[0] < canvas.shape[1] and 0 <= point[1] < canvas.shape[0]
def draw_star(canvas, center, size): #verilen canvas üzerinde merkezi center olan ve belirtilen size büyüklüğünde bir yıldız çizer.
star_points = [] #Yıldızın köşe noktalarını tutacak boş bir liste oluşturulur.
for i in range(5): #Beşgen yıldız için döngü oluşturulur.
outer_angle = i * 2 * math.pi / 5 - math.pi / 2 #Dış açı hesaplanır.
inner_angle = (i * 2 + 1) * math.pi / 5 - math.pi / 2 #İç açı hesaplanır.
outer_point = (int(center[0] + size * math.cos(outer_angle)), int(center[1] + size * math.sin(outer_angle))) #Dış köşe noktasının merkezden uzaklığı ve açı kullanılarak koordinatları hesaplanır.
inner_point = (int(center[0] + (size // 2) * math.cos(inner_angle)), int(center[1] + (size // 2) * math.sin(inner_angle))) #İç köşe noktasının merkezden uzaklığı ve açı kullanılarak koordinatları hesaplanır.
if is_point_within_canvas(outer_point, canvas) and is_point_within_canvas(inner_point, canvas): #outer_point ve inner_point noktalarının tuval içinde olup olmadığını kontrol eder.
star_points.append(outer_point) #Hesaplanan dış köşe noktası star_points listesine eklenir.
star_points.append(inner_point) #Hesaplanan iç köşe noktası star_points listesine eklenir.
else:
return None #Eğer noktalar tuval içinde değilse, fonksiyon None döndürür ve çalışmayı sonlandırır.
star_points = np.array(star_points, np.int32).reshape((-1, 1, 2)) #listesi bir numpy array'e dönüştürülür ve çizim için uygun şekilde yeniden şekillendirilir.
cv2.polylines(canvas, [star_points], isClosed=True, color=(0, 0, 0), thickness=2)
#belirtilen noktalardan oluşan yıldızın çizgileri canvas üzerine çizilir. isClosed=True ile yıldızın kapalı bir şekilde çizilmesi sağlanır.
#color=(0, 0, 0) ile yıldızın siyah renkte çizilmesi belirtilir. thickness=2 ile çizgi kalınlığı belirlenir.
return star_points #Çizilen yıldızın köşe noktalarının oluşturduğu numpy array döndürülür.
def draw_expanding_stars(canvas, center, size): #belirtilen size değerine kadar genişleyen yıldızlar çizer.
current_size = 50 #başlangıçta 50 olarak ayarlanır ve her adımda 50 birim artırılır.
last_points = None #son genişleme adımının köşe noktalarını tutar ve döngü bittiğinde döndürülür.
while current_size <= size: #belirtilen size değerine kadar olan adımlarda döngüyü çalıştırır.
star_points = draw_star(canvas, center, current_size) #draw_star fonksiyonu çağrılır ve belirtilen canvas, center (merkez) ve current_size (geçerli boyut) kullanılarak bir yıldız çizilir. Bu fonksiyonun döndürdüğü köşe noktaları star_points değişkenine atanır.
if star_points is not None: #Eğer star_points None değilse, yani yıldız başarıyla çizilmişse, bu koşul sağlanır.
last_points = star_points #star_points değişkenindeki köşe noktaları last_points değişkenine atanır. Bu, bir sonraki adımda kullanılacak köşe noktalarını günceller.
current_size += 50 #Her adımda current_size değeri 50 birim artırılarak yıldızın boyutu büyütülür.
return last_points #Son genişleme adımının köşe noktalarını içeren bir numpy array olarak döndürülür.
def expand_stars(expansion_speed=500, duration=45): #yıldızların genişlemesini görselleştiren ana işlevi gerçekleştirir.
size = 50 #Başlangıçta yıldızların boyutu 50 birim olarak ayarlanır.
start_time = cv2.getTickCount() / cv2.getTickFrequency() # İşlevin başlangıç zamanı ölçülür.
end_time = start_time + duration # İşlevin çalışma süresi duration ile belirlenir.
while cv2.getTickCount() / cv2.getTickFrequency() < end_time: # İşlev, belirtilen süre boyunca döngüyü çalıştırır.
canvas = create_canvas() #Her döngü adımında yeni bir tuval oluşturulur.
center = (canvas.shape[1] // 2, canvas.shape[0] // 2) #Tuvalin merkezi hesaplanır.
draw_center_circle(canvas, center) # Merkez daire çizimi yapılır.
last_points = draw_expanding_stars(canvas, center, size) #fonksiyonu çağrılarak genişleyen yıldızlar çizilir ve son köşe noktaları last_points değişkenine atanır.
if last_points is not None: #değişkeni boş değilse (yani yıldızlar çizilmişse):
for point in last_points: #Her köşe noktası için:
cv2.circle(canvas, tuple(point[0]), 8, (0, 0, 255), -1) # Kırmızı noktalar ekleme
cv2.imshow("Canvas", canvas)
key = cv2.waitKey(expansion_speed)
if key == 27: # Esc tuşuna basıldığında döngü sonlandırılır
break
size += 50 #her adımda 50 birim artırılır ve yıldızların boyutunu kontrol eder.
cv2.destroyAllWindows()
if __name__ == "__main__": # Python dosyasının doğrudan çalıştırıldığı zamanlarda belirli bir kod bloğunun çalıştırılmasını sağlar
expand_stars()
Editor is loading...
Leave a Comment