zoria/src/vector.py

52 lines
1.3 KiB
Python
Raw Normal View History

2020-04-04 12:14:35 -07:00
from math import floor, ceil
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):
self.x = float(x)
2020-02-24 17:46:30 -08:00
self.y = float(y or x)
def __repr__(self):
return "Vector {{x: {0}, y: {1}}}".format(self.x, self.y)
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
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))
def apply(self, func):
return Vector(func(self.x), func(self.y))