+# Copyright 2014 MINES ParisTech
+#
+# This file is part of Linpy.
+#
+# Linpy is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Linpy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Linpy. If not, see <http://www.gnu.org/licenses/>.
+
import math
import numbers
import operator
"""
def isorigin(self):
- """
- Return True if a Point is the origin.
- """
+ """
+ Return True if a Point is the origin.
+ """
return not bool(self)
def __hash__(self):
return super().__hash__()
def __add__(self, other):
- """
- Adds a Point to a Vector and returns the result as a Point.
- """
+ """
+ Adds a Point to a Vector and returns the result as a Point.
+ """
if not isinstance(other, Vector):
return NotImplemented
coordinates = self._map2(other, operator.add)
return Point(coordinates)
def __sub__(self, other):
- """
- Returns the difference between two Points as a Vector.
- """
+ """
+ Returns the difference between two Points as a Vector.
+ """
coordinates = []
if isinstance(other, Point):
coordinates = self._map2(other, operator.sub)
return NotImplemented
def __eq__(self, other):
- """
- Compares two Points for equality.
- """
+ """
+ Compares two Points for equality.
+ """
return isinstance(other, Point) and \
self._coordinates == other._coordinates
def aspolyhedron(self):
- """
- Return a Point as a polyhedron.
- """
+ """
+ Return a Point as a polyhedron.
+ """
from .polyhedra import Polyhedron
equalities = []
for symbol, coordinate in self.coordinates():
return super().__new__(cls, coordinates)
def isnull(self):
- """
- Returns true if a Vector is null.
- """
+ """
+ Returns true if a Vector is null.
+ """
return not bool(self)
def __hash__(self):
return super().__hash__()
def __add__(self, other):
- """
- Adds either a Point or Vector to a Vector.
- """
+ """
+ Adds either a Point or Vector to a Vector.
+ """
if isinstance(other, (Point, Vector)):
coordinates = self._map2(other, operator.add)
return other.__class__(coordinates)
def angle(self, other):
"""
- Retrieve the angle required to rotate the vector into the vector passed in argument. The result is an angle in radians, ranging between -pi and pi.
+ Retrieve the angle required to rotate the vector into the vector passed
+ in argument. The result is an angle in radians, ranging between -pi and
+ pi.
"""
if not isinstance(other, Vector):
raise TypeError('argument must be a Vector instance')
return result
def __eq__(self, other):
- """
- Compares two Vectors for equality.
- """
+ """
+ Compares two Vectors for equality.
+ """
return isinstance(other, Vector) and \
self._coordinates == other._coordinates
return hash(tuple(self.coordinates()))
def __mul__(self, other):
- """
- Multiplies a Vector by a scalar value.
- """
+ """
+ Multiplies a Vector by a scalar value.
+ """
if not isinstance(other, numbers.Real):
return NotImplemented
coordinates = self._map(lambda coordinate: other * coordinate)
__rmul__ = __mul__
def __neg__(self):
- """
- Returns the negated form of a Vector.
- """
+ """
+ Returns the negated form of a Vector.
+ """
coordinates = self._map(operator.neg)
return Vector(coordinates)
def norm(self):
- """
- Normalizes a Vector.
- """
+ """
+ Normalizes a Vector.
+ """
return math.sqrt(self.norm2())
def norm2(self):
return self / self.norm()
def __sub__(self, other):
- """
- Subtract a Point or Vector from a Vector.
- """
+ """
+ Subtract a Point or Vector from a Vector.
+ """
if isinstance(other, (Point, Vector)):
coordinates = self._map2(other, operator.sub)
return other.__class__(coordinates)