28 #if defined(POLICY_RECURSES)
29 #error Recursive header files inclusion detected in Policy.h
32 #define POLICY_RECURSES
44 #include <DGtal/images/RigidTransformation2D.h>
45 #include "ErrorVectorField.h"
54 template<
typename TSpace,
typename TDomain,
typename BijectiveRotation>
56 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
59 virtual double evaluate(
const TDomain& set2d,
const BijectiveRotation& reflections,
double my_angle,
typename TSpace::Point my_center)
const = 0;
64 template<
typename TSpace,
typename TDomain,
typename TBijectiveRotation>
66 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
69 double evaluate(
const TDomain& set2d,
const TBijectiveRotation& reflections,
double my_angle,
typename TSpace::Point my_center)
const override {
74 for(std::vector<typename TSpace::RealPoint> vecError: errors) {
76 outError=
std::max(outError,std::sqrt((vecErrorRealRot[0]*vecErrorRealRot[0]+vecErrorRealRot[1]*vecErrorRealRot[1])));
83 template<
typename TSpace,
typename TDomain,
typename TBijectiveRotation>
84 struct L2 :
public Policy<TSpace,TDomain,TBijectiveRotation> {
85 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
88 double evaluate(
const TDomain& set2d,
const TBijectiveRotation& reflections,
double my_angle,
typename TSpace::Point my_center)
const override {
92 for(std::vector<typename TSpace::RealPoint> vecError: errors) {
94 outError+= (vecErrorRealRot[0]*vecErrorRealRot[0]+vecErrorRealRot[1]*vecErrorRealRot[1]);
96 return std::sqrt(outError);
104 template<
typename TSpace,
typename TDomain,
typename TBijectiveRotation>
106 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
109 double evaluate(
const TDomain& set2d,
const TBijectiveRotation& reflections,
double my_angle,
typename TSpace::Point my_center)
const override {
112 double outError = 0.;
114 for(std::vector<typename TSpace::RealPoint> vecError: errors) {
115 for(
int i = 1 ; i<vecError.size();++i ) {
117 outError+=(1./8.)*(vecError[i][0]*vecError[i][0]+vecError[i][1]*vecError[i][1]);
120 return std::sqrt(outError/(set2d.size()));
126 template<
typename TSpace,
typename TDomain,
typename TBijectiveRotation>
134 double evaluate(
const TDomain& set2d,
const TBijectiveRotation& reflections,
double my_angle,
typename TSpace::Point my_center)
const override {
144 #undef POLICY_RECURSES
DGtal is the top-level namespace which contains all DGtal functions and types.
VectorField getOutputVectorFieldFromContour(const TDomain &set2dContour, bool continuityVecField=false)
double evaluate(const TDomain &set2d, const TBijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const override
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
ErrorVectorField< TSpace, TDomain, TBijectiveRotation, typename TSpace::RealPoint > ErrorRealVectors
double evaluate(const TDomain &set2d, const TBijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const override
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
ErrorVectorField< TSpace, TDomain, TBijectiveRotation, typename TSpace::RealPoint > ErrorRealVectors
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
ErrorVectorField< TSpace, TDomain, TBijectiveRotation, typename TSpace::RealPoint > ErrorRealVectors
double evaluate(const TDomain &set2d, const TBijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const override
double evaluate(const TDomain &set2d, const TBijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const override
MixedPolicy(const double lambda, const double mu)
virtual ~Policy()=default
virtual double evaluate(const TDomain &set2d, const BijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const =0
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
PointVector< 3, double > RealPoint