9template <
class DataPo
int,
class WeightKernel>
11 const DataPoint& _q)
const
13 const auto lq = NeighborhoodFrame::convertToLocalBasis(_q.pos());
16 return {(d <= m_t) ? m_wk.f(d / m_t) :
Scalar(0.), lq};
18 return {m_wk.f(d / m_t), lq};
21template <
class DataPo
int,
class WeightKernel>
25 static_assert(WeightKernel::isDValid,
"First order derivatives are required");
27 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
30 if ((!isCompact) || (d <= m_t && d !=
Scalar(0.)))
31 result = (q / (d * m_t)) * m_wk.df(d / m_t);
35template <
class DataPo
int,
class WeightKernel>
39 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
41 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
43 if ((!isCompact) || (d <= m_t && d !=
Scalar(0.)))
45 Scalar der = m_wk.df(d / m_t);
46 result = q * q.transpose() / d * (m_wk.ddf(d / m_t) / m_t - der / d);
47 result.diagonal().array() += der;
48 result *=
Scalar(1.) / (m_t * d);
53template <
class DataPo
int,
class WeightKernel>
57 static_assert(WeightKernel::isDValid,
"First order derivatives are required");
58 Scalar d = NeighborhoodFrame::convertToLocalBasis(_q).norm();
59 return ((!isCompact) || (d <= m_t)) ?
Scalar(-d * m_wk.df(d / m_t) / (m_t * m_t)) :
Scalar(0.);
62template <
class DataPo
int,
class WeightKernel>
66 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
67 Scalar d = NeighborhoodFrame::convertToLocalBasis(_q).norm();
68 return ((!isCompact) || (d <= m_t)) ?
Scalar(
Scalar(2.) * d / (m_t * m_t * m_t) * m_wk.df(d / m_t) +
69 d * d / (m_t * m_t * m_t * m_t) * m_wk.ddf(d / m_t))
73template <
class DataPo
int,
class WeightKernel>
77 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
79 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
81 if ((!isCompact) || (d <= m_t && d !=
Scalar(0.)))
82 result = -q / (m_t * m_t) * (m_wk.df(d / m_t) / d + m_wk.ddf(d / m_t) / m_t);
Weight neighbors according to the euclidean distance between a query and a reference position.
typename DataPoint::MatrixType MatrixType
Matrix type from DataPoint.
std::pair< Scalar, VectorType > WeightReturnType
Return type of the method #w()
typename DataPoint::Scalar Scalar
Scalar type from DataPoint.
typename DataPoint::VectorType VectorType
Vector type from DataPoint.