49#include <visp3/core/vpException.h>
50#include <visp3/core/vpMath.h>
51#include <visp3/core/vpMatrix.h>
53#if defined(VISP_HAVE_FUNC__FINITE)
57#if !(defined(VISP_HAVE_FUNC_ISNAN) || defined(VISP_HAVE_FUNC_STD_ISNAN)) || \
58 !(defined(VISP_HAVE_FUNC_ISINF) || defined(VISP_HAVE_FUNC_STD_ISINF)) || \
59 !(defined(VISP_HAVE_FUNC_ISFINITE) || defined(VISP_HAVE_FUNC_STD_ISFINITE) || defined(VISP_HAVE_FUNC__FINITE))
60#if defined _MSC_VER || defined __BORLANDC__
62typedef unsigned __int64 uint64;
65typedef uint64_t uint64;
68#ifndef DOXYGEN_SHOULD_SKIP_THIS
85const double vpMath::ang_min_sinc = 1.0e-8;
86const double vpMath::ang_min_mc = 2.5e-4;
95#if defined(VISP_HAVE_FUNC_STD_ISNAN)
96 return std::isnan(value);
97#elif defined(VISP_HAVE_FUNC_ISNAN)
99#elif defined(VISP_HAVE_FUNC__ISNAN)
100 return (
_isnan(value) != 0);
105 return (((
unsigned)(
ieee754.u >> 32) & 0x7fffffff) + ((
unsigned)
ieee754.u != 0) > 0x7ff00000) != 0;
116#if defined(VISP_HAVE_FUNC_STD_ISNAN)
117 return std::isnan(value);
118#elif defined(VISP_HAVE_FUNC_ISNAN)
120#elif defined(VISP_HAVE_FUNC__ISNAN)
121 return (
_isnan(value) != 0);
126 return ((
unsigned)
ieee754.u & 0x7fffffff) > 0x7f800000;
139#if defined(VISP_HAVE_FUNC_STD_ISINF)
140 return std::isinf(value);
141#elif defined(VISP_HAVE_FUNC_ISINF)
160#if defined(VISP_HAVE_FUNC_STD_ISINF)
161 return std::isinf(value);
162#elif defined(VISP_HAVE_FUNC_ISINF)
168 return ((
unsigned)
ieee754.u & 0x7fffffff) == 0x7f800000;
180#if defined(VISP_HAVE_FUNC_STD_ISFINITE)
181 return std::isfinite(value);
182#elif defined(VISP_HAVE_FUNC_ISFINITE)
184#elif defined(VISP_HAVE_FUNC__FINITE)
199#if defined(VISP_HAVE_FUNC_STD_ISFINITE)
200 return std::isfinite(value);
201#elif defined(VISP_HAVE_FUNC_ISFINITE)
203#elif defined(VISP_HAVE_FUNC__FINITE)
217 for (
size_t i = 0; i <
str.size(); i++) {
235 if (
fabs(x) < ang_min_mc)
238 return ((1.0 -
cosx) / x / x);
251 if (
fabs(x) < ang_min_mc)
254 return ((1.0 -
sinx / x) / x / x);
266 if (
fabs(x) < ang_min_sinc)
281 if (
fabs(x) < ang_min_sinc)
300 size_t size = v.size();
302 double sum = std::accumulate(v.begin(), v.end(), 0.0);
304 return sum / (
double)size;
320 std::vector<double>
v_copy = v;
321 size_t size =
v_copy.size();
353 std::vector<double>
diff(v.size());
354#if VISP_CXX_STANDARD > VISP_CXX_STANDARD_98
355 std::transform(v.begin(), v.end(),
diff.begin(), std::bind(std::minus<double>(), std::placeholders::_1, mean));
357 std::transform(v.begin(), v.end(),
diff.begin(), std::bind2nd(std::minus<double>(), mean));
384 if (
imPts.size() < 3) {
389 for (
size_t i = 0; i <
imPts.size(); i++) {
398 for (
size_t i = 0; i <
imPts.size(); i++) {
404 AtA[1][0] = AtA[0][1];
415 for (
size_t i = 0; i <
imPts.size(); i++) {
419 error += std::fabs(a *
x0 + b *
y0 - c);
422 return error /
imPts.size();
582 std::vector<std::pair<double, double> >
lonlat_vec;
583#if (VISP_CXX_STANDARD > VISP_CXX_STANDARD_98)
588 for (
int m = 0;
m < m_theta;
m++) {
589 double theta =
M_PI * (
m + 0.5) / m_theta;
627 for (
size_t i = 0; i <
lonlatVec.size(); i++) {
695 for (
unsigned int i = 0; i <
r.size(); i++) {
710 for (
unsigned int i = 0; i <
r.size(); i++) {
725 for (
unsigned int i = 0; i <
r.size(); i++) {
Implementation of column vector and the associated operations.
vpColVector & normalize()
static vpColVector crossProd(const vpColVector &a, const vpColVector &b)
error that can be emitted by ViSP classes.
@ notInitialized
Used to indicate that a parameter is not initialized.
@ dimensionError
Bad dimension.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static double msinc(double sinx, double x)
static bool isNaN(double value)
static std::vector< vpHomogeneousMatrix > getLocalTangentPlaneTransformations(const std::vector< std::pair< double, double > > &lonlatVec, double radius, vpHomogeneousMatrix(*toECEF)(double lonDeg, double latDeg, double radius))
static double rad(double deg)
static double getMedian(const std::vector< double > &v)
static double sinc(double x)
static double getStdev(const std::vector< double > &v, bool useBesselCorrection=false)
static vpHomogeneousMatrix lookAt(const vpColVector &from, const vpColVector &to, vpColVector tmp)
static int modulo(int a, int n)
static vpHomogeneousMatrix enu2ecef(double lonDeg, double latDeg, double radius)
static double lineFitting(const std::vector< vpImagePoint > &imPts, double &a, double &b, double &c)
static int round(double x)
static bool isFinite(double value)
static double getMean(const std::vector< double > &v)
static bool isInf(double value)
static vpHomogeneousMatrix enu2ned(const vpHomogeneousMatrix &enu_M)
static double mcosc(double cosx, double x)
static double deg(double rad)
static bool isNumber(const std::string &str)
static _Tp saturate(unsigned char v)
static std::vector< std::pair< double, double > > computeRegularPointsOnSphere(unsigned int maxPoints)
static vpHomogeneousMatrix ned2ecef(double lonDeg, double latDeg, double radius)
Implementation of a matrix and operations on matrices.
vpColVector eigenValues() const
Implementation of a generic rotation vector.