vector.py
# only used by point.py, which is never used # last updated 29-Jul-2008 -- dmreagan from math import sqrt import sys class Vector2: def __init__(self, x = 0.0, y = 0.0): self.e = [float(x), float(y)] self.name = 'Vector2' def Set(self, x, y): self.e[0], self.e[1] = x,y def SetX(self, x): self.e[0] = x def SetY(self, y): self.e[1] = y def x(self): return self.e[0] def y(self): return self.e[1] def length(self): return sqrt( self.e[0]*self.e[0] + self.e[1]*self.e[1]) def squaredLength(self): return self.e[0]*self.e[0] + self.e[1]*self.e[1] def MakeUnitVector(self): l = self.length() try: x = self.e[0]/l y = self.e[1]/l except: print 'Error', sys.exc_type, sys.exc_value sys.exit(1) else: self.e[0], self.e[1] = x,y def __getitem__(self, i): return self.e[i] def __setitem__(self, i, val): self.e[i] = val def __add__(self, other): return Vector2( self.e[0]+other[0], self.e[1] + other[1]) def __sub__(self, other): return Vector2( self.e[0] - other[0], self.e[1] - other[1]) def __mul__(self, n): return Vector2( self.e[0] * n, self.e[1] * n) def __div__(self, n): return Vector2( self.e[0]/n, self.e[1]/n) def __repr__(self): return '%f %f' % (self.e[0], self.e[1]) def __getattr__(self, name): return getattr(self, name) class Vector3: def __init__(self, x = 0, y = 0, z = 0): self.e = [float(x), float(y), float(z)] self.name = 'Vector3' def Set(self, x, y, z): self.e[0], self.e[1], self.e[2] = x,y,z def SetX(self, x): self.e[0] = x def SetY(self, y): self.e[1] = y def SetZ(self, z): self.e[2] = z def x(self): return self.e[0] def y(self): return self.e[1] def z(self): return self.e[2] def length(self): return sqrt( self.e[0]*self.e[0] + self.e[1]*self.e[1] + self.e[2]*self.e[2]) def squaredLength(self): return self.e[0]*self.e[0] + self.e[1]*self.e[1] + self.e[2]*self.e[2] def MakeUnitVector(self): l = self.length() try: x = self.e[0]/l y = self.e[1]/l z = self.e[2]/l except: print 'Error', sys.exc_type, sys.exc_value sys.exit(1) else: self.e[0], self.e[1], self.e[2] = x,y,z def __getitem__(self, i): return self.e[i] def __setitem__(self, i, val): self.e[i] = val def __add__(self, other): return Vector3( self.e[0]+other[0], self.e[1] + other[1], self.e[2]+other[2]) def __sub__(self, other): return Vector3( self.e[0] - other[0], self.e[1] - other[1], self.e[2] - other[2]) def __mul__(self, n): return Vector3( self.e[0] * n, self.e[1] * n, self.e[2] * n) def __div__(self, n): return Vector3( self.e[0]/n, self.e[1]/n, self.e[2]/n) def __repr__(self): return '%f %f %f' % (self.e[0], self.e[1], self.e[2]) # infinite loop? def __getattr__(self, name): return getattr(self, name) def dot(v1, v2): l = len(v1.e) if l == 2: return v1[0]*v2[0] + v1[1]*v2[1] elif l == 3: return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2] def cross(v1,v2): return Vector3( v1[1]*v2[2] - v1[2]*v2[1], -(v1[0]*v2[2] - v1[2]*v2[0]), v1[0]*v2[1] - v1[1]*v2[0] ) if __name__ == '__main__': v1 = Vector3( 1,0,0) v2 = Vector3(0,1,0) print 'dot =', dot(v1, v2) print 'cross = ', cross(v1,v2) v3 = v1 + v2 print v3 v3.MakeUnitVector() print 'Normalized', v3
by
AMcneil
—
last modified
Feb 29, 2016 12:25 PM