2020-04-04 12:14:35 -07:00
|
|
|
from math import floor, ceil
|
|
|
|
|
2020-02-24 16:12:42 -08:00
|
|
|
def vec_or_num(x, y = None):
|
|
|
|
if (type(x) is int or type(x) is float) == True:
|
|
|
|
return Vector(x, y or x)
|
|
|
|
|
|
|
|
return x
|
|
|
|
|
|
|
|
class Vector:
|
2020-02-24 17:46:30 -08:00
|
|
|
def __init__(self, x = 0, y = None):
|
2020-02-24 16:12:42 -08:00
|
|
|
self.x = float(x)
|
2020-02-24 17:46:30 -08:00
|
|
|
self.y = float(y or x)
|
2020-02-24 16:12:42 -08:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return "Vector {{x: {0}, y: {1}}}".format(self.x, self.y)
|
|
|
|
|
2020-04-23 14:19:46 -07:00
|
|
|
def __eq__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return self.x == vec.x and self.y == vec.y
|
|
|
|
|
|
|
|
def __ne__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return self.x != vec.x or self.y != vec.y
|
2020-02-24 16:12:42 -08:00
|
|
|
|
|
|
|
def __add__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return Vector(self.x + vec.x, self.y + vec.y)
|
|
|
|
|
|
|
|
def __sub__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return Vector(self.x - vec.x, self.y - vec.y)
|
|
|
|
|
|
|
|
def __mul__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return Vector(self.x * vec.x, self.y * vec.y)
|
|
|
|
|
|
|
|
def __div__(self, b):
|
|
|
|
vec = vec_or_num(b)
|
|
|
|
return Vector(self.x / vec.x, self.y / vec.y)
|
2020-04-04 12:14:35 -07:00
|
|
|
|
|
|
|
def __round__(self):
|
|
|
|
return Vector(round(self.x), round(self.y))
|
|
|
|
|
|
|
|
def __floor__(self):
|
|
|
|
return Vector(floor(self.x), floor(self.y))
|
|
|
|
|
|
|
|
def __ceil__(self):
|
|
|
|
return Vector(ceil(self.x), ceil(self.y))
|
2020-04-23 14:19:46 -07:00
|
|
|
|
|
|
|
def apply(self, func):
|
|
|
|
return Vector(func(self.x), func(self.y))
|