Files
@ 500e573f202d
Branch filter:
Location: OneEye/src/vector3.py - annotation
500e573f202d
2.2 KiB
text/x-python
readme.md edited online with Bitbucket
3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b | 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, self.z)=(self.y*v.z-self.z*v.y, self.z*v.x-self.x*v.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)
## Multiplicates the vector as to set the first nonzero coordinate to 1.
def canonize(self):
if self.x!=0: factor=self.x
elif self.y!=0: factor=self.y
elif self.z!=0: factor=self.z
else: factor=1
self/=factor
return self
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
|