9template <
class DataPo
int,
class WeightKernel>
10typename DistWeightFunc<DataPoint, WeightKernel>::WeightReturnType
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>
24 const DataPoint&)
const
26 static_assert(WeightKernel::isDValid,
"First order derivatives are required");
28 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
31 if ((!isCompact) || (d <= m_t && d !=
Scalar(0.))) result = (q / (d * m_t)) * m_wk.df(d / m_t);
35template <
class DataPo
int,
class WeightKernel>
38 const DataPoint&)
const
40 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
42 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
44 if ((!isCompact) ||(d <= m_t && d !=
Scalar(0.)))
46 Scalar der = m_wk.df(d/m_t);
47 result = q*q.transpose()/d*(m_wk.ddf(d/m_t)/m_t - der/d);
48 result.diagonal().array() += der;
49 result *=
Scalar(1.)/(m_t*d);
54template <
class DataPo
int,
class WeightKernel>
57 const DataPoint&)
const
59 static_assert(WeightKernel::isDValid,
"First order derivatives are required");
60 Scalar d = NeighborhoodFrame::convertToLocalBasis(_q).norm();
61 return ((!isCompact) ||(d <= m_t)) ?
Scalar( - d*m_wk.df(d/m_t)/(m_t*m_t) ) :
Scalar(0.);
64template <
class DataPo
int,
class WeightKernel>
67 const DataPoint&)
const
69 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
70 Scalar d = NeighborhoodFrame::convertToLocalBasis(_q).norm();
71 return ((!isCompact) ||(d <= m_t)) ?
Scalar(
Scalar(2.)*d/(m_t*m_t*m_t)*m_wk.df(d/m_t) +
72 d*d/(m_t*m_t*m_t*m_t)*m_wk.ddf(d/m_t)) :
76template <
class DataPo
int,
class WeightKernel>
79 const DataPoint&)
const
81 static_assert(WeightKernel::isDDValid,
"Second order derivatives are required");
83 const auto q = NeighborhoodFrame::convertToLocalBasis(_q);
85 if ((!isCompact) ||(d <= m_t && d !=
Scalar(0.)))
86 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.
typename DataPoint::Scalar Scalar
Scalar type from DataPoint.
typename DataPoint::VectorType VectorType
Vector type from DataPoint.