Files
@ 9ef2a632d9b0
Branch filter:
Location: OneEye/vector3.py - annotation
9ef2a632d9b0
2.0 KiB
text/x-python
init commit
9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 9ef2a632d9b0 | import math
class Vector3:
def __init__(self,x,y,z):
self.x=x
self.y=y
self.z=z
def __add__(self,v):
return Vector3(self.x+v.x, self.y+v.y, self.z+v.z)
def __iadd__(self,v):
self.x+=v.x
self.y+=v.y
self.z+=v.z
return self
def __sub__(self,v):
return Vector3(self.x-v.x, self.y-v.y, self.z-v.z)
def __isub__(self,v):
self.x-=v.x
self.y-=v.y
self.z-=v.z
return self
def __neg__(self):
return Vector3(-self.x, -self.y, -self.z)
def __mul__(self,a): # scalar or dot product
if isinstance(a,Vector3):
return self.x*a.x + self.y*a.y + self.z*a.z
else:
return Vector3(self.x*a, self.y*a, self.z*a)
def __imul__(self,a):
if isinstance(a,Vector3): raise BadOperandError(self,a,'attempted in-place dot multiplication')
self.x*=a
self.y*=a
self.z*=a
return self
def __rmul__(self,a):
return self.__mul__(a)
def __truediv__(self,a):
return Vector3(self.x/a, self.y/a, self.z/a)
def __itruediv__(self,a):
self.x/=a
self.y/=a
self.z/=a
return self
def __floordiv__(self,a):
return Vector3(self.x//a, self.y//a, self.z//a)
def __ifloordiv__(self,a):
self.x//=a
self.y//=a
self.z//=a
return self
def __xor__(self,v): # vector cross product
return Vector3(self.y*v.z-self.z*v.y, self.z*v.x-self.x*v.z, self.x*v.y-self.y*v.x)
def __ixor__(self,v):
self.x=self.y*v.z-self.z*v.y
self.y=self.z*v.x-self.x*v.z
self.z=self.x*v.y-self.y*v.x
return self
def __abs__(self):
return math.sqrt(self.x*self.x + self.y*self.y + self.z*self.z)
def __str__(self):
return str((self.x,self.y,self.z))
def __repr__(self):
return 'Vector3'+self.__str__()
class BadOperandError(ArithmeticError):
def __init__(self,u,v,message):
self.u=u
self.v=v
self.message=message
|