Untitled
unknown
plain_text
a year ago
5.7 kB
6
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