from random import random class Vector: def __init__(self, coord): x, y, z = coord self.x = float(x) self.y = float(y) self.z = float(z) def coord(self): return (float(self.x), float(self.y), float(self.z)) def __add__(first, second): if type(second) == Vector: a, b, c = first.coord() d, e, f = second.coord() return Vector((a + d, b + e, c + f)) return first + second*ones() def __rmul__(vector, item): d, e, f = vector.coord() return Vector((float(item*d), float(item*e), float(item*f))) def __radd__(vector, item): return vector + item def __mul__(first, second): if type(second) == Vector: d, e, f = first.coord() a, b, c = second.coord() return a*d + b*e + c*f else: return second*first def norm(self): return (self*self)**0.5 def __truediv__(vector, scalar): if scalar == 0: return float('inf')*vector else: return (1/scalar)*vector def __sub__(vector1, vector2): return vector1 + (-1 * vector2) def __repr__(self): return 'Vector' + str(self.coord()) def __str__(self): return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n' def __xor__(first, second): a, b, c = first.coord() d, e, f = second.coord() return Vector((b*f - e*c, c*d - f*a, a*e - b*d)) def __neg__(self): return -1*self def __pos__(self): return self def __eq__(first, second): if type(second) != Vector: return False a, b, c = first.coord() d, e, f = second.coord() return a == d and b == e and c == f def __iter__(self): yield self.x yield self.y yield self.z def __getitem__(self, key): if key == 0 or key == 'x': return self.x elif key == 1 or key == 'y': return self.y elif key == 2 or key == 'z': return self.z else: raise IndexError('index out of bounds') def __setitem__(self, key, value): if key == 0 or key == 'x': self.x = value elif key == 1 or key == 'y': self.y = value elif key == 2 or key == 'z': self.z = value else: raise IndexError('index out of bounds') def __pow__(vector1, vector2): final = [] for x,y in zip(vector1, vector2): final.append(x*y) return Vector(final) def normalized(self): return self/self.norm() def base(): return Vector((1,0,0)),Vector((0,1,0)),Vector((0,0,1)) def rand(): return Vector([random(), random(), random()]) def ones(): return Vector((1,1,1))