""" Plane module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ from typing import TypeVar import numpy as np Point = TypeVar('Point') class Plane: """ Plane class """ def __init__(self, origin=None, normal=None): # todo: other options to define the plane: # by two lines # by three points self._origin = origin self._normal = normal self._opposite_normal = None @property def origin(self) -> Point: """ Point origin of the plane return Point """ if self._origin is None: raise NotImplementedError return self._origin @property def normal(self): """ Plane normal [x, y, z] return np.ndarray """ if self._normal is None: raise NotImplementedError return self._normal @property def opposite_normal(self): """ Plane normal in the opposite direction [x, y, z] return np.ndarray """ if self._opposite_normal is None: coordinates = [] for coordinate in self.normal: coordinates.append(-coordinate) self._opposite_normal = np.array(coordinates) return self._opposite_normal