Skip to content

Instantly share code, notes, and snippets.

@nicelifeBS
Last active October 6, 2015 09:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicelifeBS/9243052 to your computer and use it in GitHub Desktop.
Save nicelifeBS/9243052 to your computer and use it in GitHub Desktop.
Vector class
#python
import math
class vector(object):
"""vector([x,y,z]) -> create a vector object in 3D space."""
def __init__(self, data):
self.data = data
if len(self.data) != 3:
raise ValueError("Expecting a 3D vector -> [x,y,z]")
def __repr__(self):
return repr(self.data)
def __getitem__(self, index):
"""vector[i] -> return the value of the given index i"""
return self.data[index]
def __len__(self):
return len(self.data)
def __add__(self, other):
data = []
for i in range(len(self.data)):
data.append(self.data[i] + other.data[i])
return vector(data)
def __sub__(self, other):
data = []
for i in range(len(self.data)):
data.append(self.data[i] - other.data[i])
return vector(data)
def __mul__(self, other):
data = []
try:
for i in range(len(self.data)):
data.append(self.data[i] * other.data[i])
except AttributeError:
for i in range(len(self.data)):
data.append(self.data[i] * other)
return vector(data)
def __truediv__(self, other):
data = []
try:
for i in range(len(self.data)):
data.append(self.data[i]/other.data[i])
except AttributeError:
for i in range(len(self.data)):
data.append(self.data[i]/other)
return vector(data)
def __pow__(self, power):
data = []
for i in range(len(self.data)):
data.append(self.data[i]**power)
return vector(data)
### Functions ###
def cross(vector01, vector02):
"""Cross product of two vectors"""
data = []
try:
if len(vector01) == len(vector02) and len(vector01) == 3:
x = vector01[1]*vector02[2] - vector01[2]*vector02[1]
y = vector01[2]*vector02[0] - vector01[0]*vector02[2]
z = vector01[0]*vector02[1] - vector01[1]*vector02[0]
return vector([x,y,z])
else:
pass
except AttributeError:
for i in range(len(vector01)):
data.append(vector01[i] * other)
return vector(data)
def dot(vector01, vector02):
"""vector01.dot(vector02) -> return the dot product of two vectors"""
data = []
for i in range(len(vector01)):
data.append(vector01[i] * vector02[i])
return sum(data)
def length(vector01):
"""return the length of a vector"""
return math.sqrt(vector01.data[0]**2 + vector01.data[1]**2 + vector01.data[2]**2)
def angle(vector01, vector02):
"""Angle between two vectors in degrees"""
return math.degrees(math.acos(dot(vector01, vector02) / (length(vector01) * length(vector02))))
def sqrt(vector01):
data = []
for i in range(len(vector01)):
data.append(math.sqrt(vector01[i]))
return vector(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment