Files
@ ec97d7dc6601
Branch filter:
Location: OneEye/src/vector3.py - annotation
ec97d7dc6601
2.2 KiB
text/x-python
minor updates
dependencies in readme
bug note in Grid
dependencies in readme
bug note in Grid
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
|