Files
@ 41c2b255ea2a
Branch filter:
Location: OneEye/src/vector3.py - annotation
41c2b255ea2a
2.2 KiB
text/x-python
another readme fix
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
|