From a744f00c3b4579591bc87b296f3f2a22914ce640 Mon Sep 17 00:00:00 2001 From: Fabrice Salvaire Date: Sat, 26 Jan 2019 14:35:13 +0100 Subject: [PATCH] Vector: cleanup and implemented __rmul__ --- Patro/GeometryEngine/Vector.py | 53 ++++++++++++++++++++----- unit-test/GeometryEngine/test_Vector.py | 23 ++++++----- 2 files changed, 56 insertions(+), 20 deletions(-) diff --git a/Patro/GeometryEngine/Vector.py b/Patro/GeometryEngine/Vector.py index 7b98d96..5577fda 100644 --- a/Patro/GeometryEngine/Vector.py +++ b/Patro/GeometryEngine/Vector.py @@ -20,6 +20,36 @@ """Module to implement vector. +Example of usage:: + + v = Vector2D(10, 20) + v = Vector2D((10, 20)) + v = Vector2D([10, 20]) + v = Vector2D(iterable) + v = Vector2D(v) + + v.x + v.y + + # array interface + v[0], v[1] + iter(v) + + -v + + v + v + v += v + + v - v + v -= v + + v * 2 + 2 * v + v *= 2 + + v / 2 + v /= 2 + """ #################################################################################################### @@ -51,17 +81,6 @@ class Vector2DBase(Primitive, Primitive2DMixin): def __init__(self, *args): - """ - Example of usage:: - - Vector(1, 3) - Vector((1, 3)) - Vector([1, 3]) - Vector(iterable) - Vector(vector) - - """ - array = self._check_arguments(args) # call __getitem__ once @@ -516,6 +535,12 @@ class Vector2D(Vector2DFloatBase): ############################################## + def __rmul__(self, scale): + """Return a new vector equal to the self scaled by scale""" + return self.__mul__(scale) + + ############################################## + def __imul__(self, scale): """Scale self by scale""" self._v *= scale @@ -585,6 +610,12 @@ class NormalisedVector2D(Vector2DFloatBase): """ Return a new vector equal to the self scaled by scale """ return self.__class__(scale * self._v) # Fixme: Vector2D ? + ############################################## + + def __rmul__(self, scale): + """ Return a new vector equal to the self scaled by scale """ + return self.__mul__(scale) + #################################################################################################### class HomogeneousVector2D(Vector2D): diff --git a/unit-test/GeometryEngine/test_Vector.py b/unit-test/GeometryEngine/test_Vector.py index b1a4f3d..925f429 100644 --- a/unit-test/GeometryEngine/test_Vector.py +++ b/unit-test/GeometryEngine/test_Vector.py @@ -92,13 +92,15 @@ class TestVector2D(unittest.TestCase): a, b, c = 10, 20, 30 + # unary - v1 = Vector2D(a, b) - v2 = Vector2D(b, c) - self.assertEqual(v1 + v2, Vector2D(a+b, b+c)) + self.assertEqual(-v1, Vector2D(-a, -b)) + # binary + += v1 = Vector2D(a, b) v2 = Vector2D(b, c) - self.assertEqual(v1 - v2, Vector2D(-a, -a)) + self.assertEqual(v1 + v2, Vector2D(a+b, b+c)) + self.assertEqual(v1 - v2, Vector2D(a-b, b-c)) v1 = Vector2D(a, b) v1 += Vector2D(b, c) @@ -106,18 +108,21 @@ class TestVector2D(unittest.TestCase): v1 = Vector2D(a, b) v1 -= Vector2D(b, c) - self.assertEqual(v1, Vector2D(-a, -a)) + self.assertEqual(v1, Vector2D(a-b, b-c)) + # scale * v1 = Vector2D(a, b) - self.assertEqual(v1 * a, Vector2D(a*a, b*a)) + v2 = Vector2D(a*a, b*a) + self.assertEqual(v1 * a, v2) + self.assertEqual(a * v1, v2) v1 = Vector2D(a, b) v1 *= a - self.assertEqual(v1, Vector2D(a*a, b*a)) + self.assertEqual(v1, v2) - #?# v1 = Vector2D(a, b) - #?# v1 /= a - #?# self.assertEqual(v1, Vector2D(1, 2)) + v1 = Vector2D(a, b) + v1 /= a + self.assertEqual(v1, Vector2D(1, b/a)) ############################################## -- GitLab