# import math # class ThreeVec: "Class for 3 Vector and operations" def __init__ ( self, x=0., y=0., z=0.): self.x = x self.y = y self.z = z def Add( self, tv ): newvec = ThreeVec( self.x+tv.x, self.y+tv.y, self.z+tv.z) return newvec def __add__( self, tv ): "method for overloading the + operator" newvec = ThreeVec( self.x+tv.x, self.y+tv.y, self.z+tv.z) return newvec def __mul__( self, a ): "method for overloading the * operator Vec * Zahl" newvec = ThreeVec( self.x*a, self.y*a, self.z*a) return newvec def __rmul__( self, a ): "method for overloading the * operator: Zahl * Vec" newvec = ThreeVec( self.x*a, self.y*a, self.z*a) return newvec # def Angle(self, tv): return math.acos(self.SkalProd(tv)/(self.Length()*tv.Length())) def SkalProd( self, tv ): return( self.x*tv.x + self.y*tv.y + self.z*tv.z) def Length( self ): return math.sqrt( self.x**2 + self.y**2 + self.z**2 ) def __lt__( self, tv): "method for overloading the < operator" return self.Length() < tv.Length() def __str__( self ) : return "( %6.3f, %6.3f, %6.3f )" % ( self.x, self.y, self.z) # gets only executed when called as main script # if __name__ == "__main__" : u = ThreeVec (1.,2.,0.) print (u.x, u.y, u.z) print (u) print (u*3.) print (1.2*u) import random tvc = [] for i in range(100): u = ThreeVec( random.gauss(0,1), random.gauss(0,1), random.gauss(0,1)) tvc.append(u) tvc.sort() for tv in tvc: print (tv.Length(), tv)