Ponca  8e4373a7fc557bbfb1afb9210d70f03872388d04
Point Cloud Analysis library
Loading...
Searching...
No Matches
Ponca::DistWeightFunc< DataPoint, WeightKernel > Class Template Reference

Weight neighbors according to the euclidean distance between a query and a reference position. More...

#include <weightFunc.h>

+ Inheritance diagram for Ponca::DistWeightFunc< DataPoint, WeightKernel >:
+ Collaboration diagram for Ponca::DistWeightFunc< DataPoint, WeightKernel >:

Public Types

using Scalar = typename DataPoint::Scalar
 Scalar type from DataPoint.
 
using VectorType = typename DataPoint::VectorType
 Vector type from DataPoint.
 
using MatrixType = typename DataPoint::MatrixType
 Matrix type from DataPoint.
 
using WeightReturnType = std::pair< Scalar, VectorType >
 Return type of the method #w()
 
using NeighborhoodFrame = CenteredNeighborhoodFrame< DataPoint >
 Frame used to express the neighbors locally.
 
- Public Types inherited from Ponca::CenteredNeighborhoodFrame< DataPoint >
using Scalar = typename DataPoint::Scalar
 Scalar type from DataPoint.
 
using VectorType = typename DataPoint::VectorType
 Vector type from DataPoint.
 

Public Member Functions

 DistWeightFunc (const VectorType &_evalPos=VectorType::Zero(), const Scalar &_t=Scalar(1.))
 Constructor that defines the current evaluation scale.
 
WeightReturnType operator() (const DataPoint &q) const
 Compute the weight of the given query with respect to its coordinates.
 
VectorType spacedw (const VectorType &_q, const DataPoint &) const
 First order derivative in space (for each spatial dimension \(\mathsf{x})\).
 
MatrixType spaced2w (const VectorType &_q, const DataPoint &) const
 Second order derivative in space (for each spatial dimension \(\mathsf{x})\).
 
Scalar scaledw (const VectorType &_q, const DataPoint &) const
 First order derivative in scale \(t\).
 
Scalar scaled2w (const VectorType &_q, const DataPoint &) const
 Second order derivative in scale \(t\).
 
VectorType scaleSpaced2w (const VectorType &_q, const DataPoint &) const
 Cross derivative in scale \(t\) and in space (for each spatial dimension \(\mathsf{x})\).
 
Scalar evalScale () const
 Access to the evaluation scale set during the initialization.
 
- Public Member Functions inherited from Ponca::CenteredNeighborhoodFrame< DataPoint >
 CenteredNeighborhoodFrame (const VectorType &_evalPos=VectorType::Zero())
 
void changeNeighborhoodFrame (const VectorType &_newEvalPos)
 Change neighborhood frame (move basis center)
 
VectorType convertToGlobalBasis (const VectorType &_q) const
 Convert query from local to global coordinate system, such as \(\mathbf{x}=\mathbf{x}'+\mathbf{p}\).
 
VectorType convertToLocalBasis (const VectorType &_q) const
 Convert query from global to local coordinate system, such as \(\mathbf{x}'=\mathbf{x}-\mathbf{p}\).
 
VectorType evalPos () const
 Get access to the stored points of evaluation.
 

Static Public Attributes

static constexpr bool isCompact = WeightKernel::isCompact
 Flag indicating if the weighting kernel is compact of not.
 
- Static Public Attributes inherited from Ponca::CenteredNeighborhoodFrame< DataPoint >
static constexpr bool hasLocalFrame = true
 Flag indicating that this class modifies the coordinates when passing from global to local.
 

Protected Attributes

Scalar m_t
 Evaluation scale.
 
WeightKernel m_wk
 1D function applied to weight queries
 

Detailed Description

template<class DataPoint, class WeightKernel>
class Ponca::DistWeightFunc< DataPoint, WeightKernel >

Weight neighbors according to the euclidean distance between a query and a reference position.

The evaluation position is set in the constructor. All the queries are expressed in global system, and converted internally to relatively to the evaluation position using CenteredNeighborhoodFrame.

Template Parameters
DataPointType of input points.
WeightKernel1d function used to compute the weight depending on the distance between query point and the basis center. If WeightKernel::isCompact == true, the distance to the basis center is checked against the scale parameter, and any point whose distance is larger than the scale will be assigned with a weight of \(0\). For non-compact (ie. global) kernels, the weights are computed for all points.
See also
operator()
Warning
DistWeightFunc assumes that the evaluation scale t is strictly positive, but the valus is not checked

Definition at line 126 of file weightFunc.h.

Member Typedef Documentation

◆ MatrixType

template<class DataPoint , class WeightKernel >
using Ponca::DistWeightFunc< DataPoint, WeightKernel >::MatrixType = typename DataPoint::MatrixType

Matrix type from DataPoint.

Definition at line 134 of file weightFunc.h.

◆ NeighborhoodFrame

template<class DataPoint , class WeightKernel >
using Ponca::DistWeightFunc< DataPoint, WeightKernel >::NeighborhoodFrame = CenteredNeighborhoodFrame<DataPoint>

Frame used to express the neighbors locally.

Definition at line 138 of file weightFunc.h.

◆ Scalar

template<class DataPoint , class WeightKernel >
using Ponca::DistWeightFunc< DataPoint, WeightKernel >::Scalar = typename DataPoint::Scalar

Scalar type from DataPoint.

Definition at line 130 of file weightFunc.h.

◆ VectorType

template<class DataPoint , class WeightKernel >
using Ponca::DistWeightFunc< DataPoint, WeightKernel >::VectorType = typename DataPoint::VectorType

Vector type from DataPoint.

Definition at line 132 of file weightFunc.h.

◆ WeightReturnType

template<class DataPoint , class WeightKernel >
using Ponca::DistWeightFunc< DataPoint, WeightKernel >::WeightReturnType = std:: pair <Scalar, VectorType>

Return type of the method #w()

Definition at line 136 of file weightFunc.h.

Constructor & Destructor Documentation

◆ DistWeightFunc()

template<class DataPoint , class WeightKernel >
Ponca::DistWeightFunc< DataPoint, WeightKernel >::DistWeightFunc ( const VectorType _evalPos = VectorType::Zero(),
const Scalar _t = Scalar(1.) 
)
inline

Constructor that defines the current evaluation scale.

Warning
t > 0

Definition at line 146 of file weightFunc.h.

Member Function Documentation

◆ evalScale()

template<class DataPoint , class WeightKernel >
Scalar Ponca::DistWeightFunc< DataPoint, WeightKernel >::evalScale ( ) const
inline

Access to the evaluation scale set during the initialization.

Definition at line 274 of file weightFunc.h.

◆ operator()()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::WeightReturnType DistWeightFunc::operator() ( const DataPoint &  q) const
inline

Compute the weight of the given query with respect to its coordinates.

Parameters
_qQuery in global coordinate system

As the query \(\mathbf{q}\) is expressed in global coordinate, it is first converted to the centered basis. Then, the WeightKernel is directly applied to the norm of its coordinates with respect to the current scale \( t \) :

\( w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) \)

See also
convertToLocalBasis
Returns
The computed weight + the point expressed in local basis

Definition at line 11 of file weightFunc.hpp.

◆ scaled2w()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::Scalar DistWeightFunc::scaled2w ( const VectorType _q,
const DataPoint &   
) const
inline

Second order derivative in scale \(t\).

Parameters
_qQuery in global coordinate system

\( \frac{\delta^2 \frac{\left|\mathbf{q}\right|}{t}}{\delta t^2} \nabla w(\frac{\left|\mathbf{q}\right|}{t}) + \left(\frac{\delta \frac{\left|\mathbf{q}\right|}{t}}{\delta t}\right)^2 \nabla^2 w(\frac{\left|\mathbf{q}\right|}{t}) = \frac{2\left|\mathbf{q}\right|}{t^3} \nabla{w(\frac{\left|\mathbf{q}\right|}{t})} + \frac{\left|\mathbf{q}\right|^2}{t^4} \nabla^2{w(\frac{\left|\mathbf{q}\right|}{t})} \)

where \( \left|\mathbf{q}\right| \) represents the norm of the query coordinates expressed in centered basis.

Warning
Requires \(\nabla^2 w(x)\) to be valid

Definition at line 66 of file weightFunc.hpp.

◆ scaledw()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::Scalar DistWeightFunc::scaledw ( const VectorType _q,
const DataPoint &   
) const
inline

First order derivative in scale \(t\).

Parameters
_qQuery in global coordinate system

\( \frac{\delta \frac{\left|\mathbf{q}\right|}{t}}{\delta t} \nabla w(\frac{\left|\mathbf{q}\right|}{t}) = - \frac{\left|\mathbf{q}\right|}{t^2} \nabla{w(\frac{\left|\mathbf{q}\right|}{t})} \)

where \( \left|\mathbf{q}\right| \) represents the norm of the query coordinates expressed in centered basis.

Warning
Requires \(\nabla w(x)\) to be valid

Definition at line 56 of file weightFunc.hpp.

◆ scaleSpaced2w()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::VectorType DistWeightFunc::scaleSpaced2w ( const VectorType _q,
const DataPoint &   
) const
inline

Cross derivative in scale \(t\) and in space (for each spatial dimension \(\mathsf{x})\).

Parameters
_qQuery in global coordinate system

\( \frac{\delta^2 \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta t\ \delta \mathsf{x}} \nabla w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) + \frac{\delta \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta \mathsf{x}} \frac{\delta \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta t} \nabla^2 w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) = -\frac{\mathbf{q}_\mathsf{x}}{t^2} \left( \frac{1}{\left|\mathbf{q}_\mathsf{x}\right|}\nabla w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) + \frac{1}{t}\nabla^2 w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) \right)\)

where \( \left|\mathbf{q}_\mathsf{x}\right| \) represents the norm of the query coordinates expressed in centered basis.

Warning
Requires \(\nabla^2 w(x)\) to be valid

Definition at line 78 of file weightFunc.hpp.

◆ spaced2w()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::MatrixType DistWeightFunc::spaced2w ( const VectorType _q,
const DataPoint &   
) const
inline

Second order derivative in space (for each spatial dimension \(\mathsf{x})\).

Parameters
_qQuery in global coordinate system

\( \frac{\delta^2 \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta \mathsf{x}^2} \nabla w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) + \left(\frac{\delta \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta \mathsf{x}}\right)^2 \nabla^2 w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) = \frac{1}{t\left|\mathbf{q}_\mathsf{x}\right|} \left( I_d - \frac{\mathbf{q}_\mathsf{x}\mathbf{q}_\mathsf{x}^T}{\left|\mathbf{q}_\mathsf{x}\right|^2}\right) \nabla w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) + \frac{\mathbf{q}_\mathsf{x}\mathbf{q}_\mathsf{x}^T}{t^2\left|\mathbf{q}_\mathsf{x}\right|^2} \nabla^2 w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) \)

where \( \left|\mathbf{q}_\mathsf{x}\right| \) represents the norm of the query coordinates expressed in centered basis, for each spatial dimensions \( \mathsf{x}\).

Warning
Requires \(\nabla^2 w(x)\) to be valid

Definition at line 37 of file weightFunc.hpp.

◆ spacedw()

template<class DataPoint , class WeightKernel >
DistWeightFunc< DataPoint, WeightKernel >::VectorType DistWeightFunc::spacedw ( const VectorType _q,
const DataPoint &   
) const
inline

First order derivative in space (for each spatial dimension \(\mathsf{x})\).

Parameters
_qQuery in global coordinate system

\( \frac{\delta \frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}}{\delta \mathsf{x}} \nabla w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t}) = \frac{\mathbf{q}}{t\left|q\right|} \nabla{w(\frac{\left|\mathbf{q}_\mathsf{x}\right|}{t})} \)

where \( \left|\mathbf{q}_\mathsf{x}\right| \) represents the norm of the query coordinates expressed in centered basis, for each spatial dimensions \( \mathsf{x}\).

Warning
Requires \(\nabla w(x)\) to be valid

Definition at line 23 of file weightFunc.hpp.

Member Data Documentation

◆ isCompact

template<class DataPoint , class WeightKernel >
constexpr bool Ponca::DistWeightFunc< DataPoint, WeightKernel >::isCompact = WeightKernel::isCompact
staticconstexpr

Flag indicating if the weighting kernel is compact of not.

Definition at line 140 of file weightFunc.h.

◆ m_t

template<class DataPoint , class WeightKernel >
Scalar Ponca::DistWeightFunc< DataPoint, WeightKernel >::m_t
protected

Evaluation scale.

Definition at line 277 of file weightFunc.h.

◆ m_wk

template<class DataPoint , class WeightKernel >
WeightKernel Ponca::DistWeightFunc< DataPoint, WeightKernel >::m_wk
protected

1D function applied to weight queries

Definition at line 278 of file weightFunc.h.