Compare commits

..

7 Commits

2 changed files with 44 additions and 1 deletions

View File

@@ -36,6 +36,14 @@ class Vector(object):
z = self.z + other.z z = self.z + other.z
return self.__class__(x, y, z) return self.__class__(x, y, z)
def __mul__(self, other):
if not isinstance(other, Vector):
return NotImplemented
x = self.y * other.z - self.z * other.y
y = self.z * other.x - self.x * other.z
z = self.x * other.y - self.y * other.x
return self.__class__(x, y, z)
if __name__ == "__main__": if __name__ == "__main__":
v1 = Vector(3, 4, 0) v1 = Vector(3, 4, 0)

View File

@@ -4,6 +4,28 @@ from fancymath.vector import Vector
class TestVector(unittest.TestCase): class TestVector(unittest.TestCase):
def test_cross_product(self):
# given
v1 = Vector(1, 2, 3)
v2 = Vector(3, 2, 1)
# when
v3 = v1 * v2
# then
self.assertIsInstance(v3, Vector)
self.assertEqual(v3.x, -4)
self.assertEqual(v3.y, 8)
self.assertEqual(v3.z, -4)
def test_cross_product_failure(self):
v1 = Vector(1, 2, 3)
v2 = (3, 2, 1)
with self.assertRaises(TypeError):
v1 * v2
def test_add_vector(self): def test_add_vector(self):
v1 = Vector(1, 2, 3) v1 = Vector(1, 2, 3)
v2 = Vector(-3, -2, -1) v2 = Vector(-3, -2, -1)
@@ -18,3 +40,16 @@ class TestVector(unittest.TestCase):
self.assertEqual(v1.abs(), 0) self.assertEqual(v1.abs(), 0)
self.assertEqual(v2.abs(), 3) self.assertEqual(v2.abs(), 3)
self.assertEqual(v2.abs(), v3.abs()) self.assertEqual(v2.abs(), v3.abs())
def test_dot_failure(self):
with self.assertRaises(ValueError):
v1 = Vector(1, 2, 3)
v1.dot(3)
def test_dot_product(self):
v1 = Vector(1, 2, 3)
v2 = Vector(-3, -2, -1)
v3 = v1.dot(v2)
self.assertEqual(v3,v1.x * v2.x + v1.y * v2.y + v1.z * v2.z)
vzero = Vector(0, 0, 0)
self.assertEqual(v1.dot(vzero),0)