| |
|
| | 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)) |