|
|
| import math
|
| import random
|
|
|
| class Vector2D:
|
| """2 Boyutlu Vektör Sınıfı."""
|
| def __init__(self, x=0.0, y=0.0):
|
| self.x = x
|
| self.y = y
|
|
|
| def __str__(self):
|
| """Vektörün string temsilini döndürür."""
|
| return f"Vector2D({self.x:.2f}, {self.y:.2f})"
|
|
|
| def __add__(self, other):
|
| """Vektör toplama (+) operatörü."""
|
| return Vector2D(self.x + other.x, self.y + other.y)
|
|
|
| def __sub__(self, other):
|
| """Vektör çıkarma (-) operatörü."""
|
| return Vector2D(self.x - other.x, self.y - other.y)
|
|
|
| def __mul__(self, scalar):
|
| """Skaler ile çarpma (*) operatörü."""
|
| return Vector2D(self.x * scalar, self.y * scalar)
|
|
|
| def __truediv__(self, scalar):
|
| """Skaler ile bölme (/) operatörü."""
|
| if scalar == 0:
|
| return Vector2D()
|
| return Vector2D(self.x / scalar, self.y / scalar)
|
|
|
| def magnitude_squared(self):
|
| """Vektörün büyüklüğünün karesini döndürür (sqrt daha yavaştır)."""
|
| return self.x * self.x + self.y * self.y
|
|
|
| def magnitude(self):
|
| """Vektörün büyüklüğünü (uzunluğunu) döndürür."""
|
| mag_sq = self.magnitude_squared()
|
| if mag_sq == 0:
|
| return 0.0
|
| return math.sqrt(mag_sq)
|
|
|
| def normalize(self):
|
| """Vektörü birim vektöre dönüştürür (büyüklüğü 1 yapar)."""
|
| mag = self.magnitude()
|
| if mag > 0:
|
| self.x /= mag
|
| self.y /= mag
|
| return self
|
|
|
| def get_normalized(self):
|
| """Vektörün normalize edilmiş bir kopyasını döndürür."""
|
| mag = self.magnitude()
|
| if mag == 0:
|
| return Vector2D()
|
| return Vector2D(self.x / mag, self.y / mag)
|
|
|
| def limit(self, max_magnitude):
|
| """Vektörün büyüklüğünü verilen maksimum değerle sınırlar."""
|
| if self.magnitude_squared() > max_magnitude * max_magnitude:
|
| self.normalize()
|
| self.x *= max_magnitude
|
| self.y *= max_magnitude
|
| return self
|
|
|
| def distance_squared(self, other):
|
| """İki vektör arasındaki mesafenin karesini döndürür."""
|
| dx = self.x - other.x
|
| dy = self.y - other.y
|
| return dx * dx + dy * dy
|
|
|
| def distance(self, other):
|
| """İki vektör arasındaki mesafeyi döndürür."""
|
| return math.sqrt(self.distance_squared(other))
|
|
|
| def set_magnitude(self, magnitude):
|
| """Vektörün büyüklüğünü ayarlar."""
|
| self.normalize()
|
| self.x *= magnitude
|
| self.y *= magnitude
|
| return self
|
|
|
| def heading(self):
|
| """Vektörün açısını (radyan cinsinden) döndürür."""
|
| return math.atan2(self.y, self.x)
|
|
|
| @staticmethod
|
| def random_vector():
|
| """Rastgele bir yönü olan birim vektör oluşturur."""
|
| angle = random.uniform(0, 2 * math.pi)
|
| return Vector2D(math.cos(angle), math.sin(angle)) |