CGII/framework/include/cgv/math/normal_estimation.h
2018-05-17 16:01:02 +02:00

23 lines
1.4 KiB
C++

#pragma once
#include "lib_begin.h"
namespace cgv {
namespace math {
//! Compute least squares normal from an array of 3D points.
/*! Input is the number of points \c nr_points and a pointer \c _points to the point array. Points
are assumed to be float tripples laying consecutively in the memory. Thus a vector \c P of type
\c std::vector<cgv::math::fvec<float,3> > can be passed to this function according to
estimate_normal_ls(P.size(), &P.front()[0], ...). The resulting 3D normal is written into the memory
point to by \c _normal assuming space for 3 floats. If \c _evals is specified, also the eigenvalues from the
fit are written to 3 floats pointed to by \c _evals. If \c _mean is specified, also the point mean through
which the least squares plane goes is returned. If \c _evecs is specified, also the eigenvectors from the
fit are written in 3 float trippels to memory pointed to by \c _evecs.*/
extern CGV_API void estimate_normal_ls(unsigned nr_points, const float* _points, float* _normal, float* _evals = 0, float* _mean = 0, float* _evecs = 0);
/// Weighted version of \c estimate_normal_ls with additional input \c _weights pointing to \c nr_points scalar weights.
extern CGV_API void estimate_normal_wls(unsigned nr_points, const float* _points, const float* _weights, float* _normal, float* _evals = 0, float* _mean = 0, float* _evecs = 0);
}
}
#include <cgv/config/lib_end.h>