normals Compute normal vectors of activated points.
  ------------------------------------------------------------------------------
  DESCRIPTION/NOTES
  * The components of the normal vectors are saved into the attribute structure
    of the point cloud:
      * x component of n -> obj.A.nx
      * y component of n -> obj.A.ny
      * z component of n -> obj.A.nz
  * Additionally a roughness value corresponding to the standard deviation of
    the residuals is saved as roughness attribute:
      * roughness -> obj.A.roughness
  ------------------------------------------------------------------------------
  INPUT
  1 [searchRadius]
    Search radius for normal estimation.
  
  2 ['MinNoNeighbours', minNoNeighbours]
    Minimum number of nearest neighbours. If less than minNoNeighbours
    neighbours are found within the specified search radius, the normal vector
    components are set to NaN.
 
  3 ['MaxNoNeighbours', maxNoNeighbours]
    Maximum number of nearest neighbours to use for normal vector estimation.
  ------------------------------------------------------------------------------
  OUTPUT
  1 [obj]
    Updated object.
  ------------------------------------------------------------------------------
  EXAMPLES
  1 Compute normals for a subset of points and visualize them.
    pc = pointCloud('Lion.xyz');
    pc.select('UniformSampling', 3);
    pc.normals(1);
    pc.plot('Color', 'r', 'MarkerSize', 5);
    pc.plotNormals('Color', 'y', 'Scale', 5);
  ------------------------------------------------------------------------------
  philipp.glira@gmail.com
  ------------------------------------------------------------------------------