pub fn add(&mut self, p: &Point<T>) -> Option<&Point<T>> {
        let mut v = p - self.project(p);

        if v.normalize_mut() > T::EPS {
            self.basis.push(v);
            self.basis.last()
        } else {
            None
        }
    }
/// Adds a point to the subspace. If it already lies in the subspace, the
/// subspace remains unchanged and we return `None`. Otherwise, a new basis
/// vector is added, and we return a reference to it.
///
/// # Todo:
/// Implement the [Gram-Schmidt process](https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process#Numerical_stability).
Adds a point to the subspace. If it already lies in the subspace, the
subspace remains unchanged and we return `None`. Otherwise, a new basis
vector is added, and we return a reference to it.
Adds a point to the subspace . If it already lies in the subspace the subspace remains unchanged and we return ` None ` . Otherwise a new basis vector is added and we return a reference to it .
pub fn add(&mut self, p: &Point<T>) -> Option<&Point<T>> {
        let mut v = p - self.project(p);
        if v.normalize_mut() > T::EPS {
            self.basis.push(v);
            self.basis.last()
        } else {
            None
        }
    }
pub fn add ( & mut self , p : & Point < T > ) -> Option < & Point < T > > { let mut v = p - self . project ( p ) ; if v . normalize_mut ( ) > T :: EPS { self . basis . push ( v ) ; self . basis . last ( ) } else { None } }
Adds a point to the subspace.
Adds a point to the subspace .
&mut self
p
&Point<T>
&mut self
p
&Point<T>
todo:
Implement the [Gram-Schmidt process].
Implement the [ Gram - Schmidt process ] .