43#ifndef _vpFeatureMomentGravityCenter_h_
44#define _vpFeatureMomentGravityCenter_h_
46#include <visp3/visual_features/vpFeatureMoment.h>
48#ifdef VISP_MOMENTS_COMBINE_MATRICES
91 vpMomentObject obj(2); // Init object of order 2 because we need
92 // vpFeatureMomentBasic of order 1 (for vpFeatureMomentGravityCenter) which
93 // implies third-order moment primitives
94 obj.setType(vpMomentObject::DISCRETE); // Discrete mode for object
95 obj.fromVector(vec_p);
98 vpMomentDatabase mdb; //database for moment primitives. This will
99 //only contain the basic moment.
100 vpMomentBasic bm; //basic moment (this particular moment is nothing
101 //more than a shortcut to the vpMomentObject)
102 vpMomentGravityCenter gc; //gravity center
104 bm.linkTo(mdb); //add basic moment to moment database
105 gc.linkTo(mdb); //add gravity center to moment database
107 vpFeatureMomentDatabase fmdb; //feature moment database to store
108 //feature dependencies
110 //Declare and link moments to database
111 vpFeatureMomentBasic fmb(mdb,0.,0.,1.,&fmdb); fmb.linkTo(fmdb);
112 vpFeatureMomentGravityCenter fgc(mdb,0.,0.,1.,&fmdb); fgc.linkTo(fmdb);
114 //update and compute the vpMomentBasic before computing vpMomentGravityCenter
117 //update and compute the vpMomentGravityCenter before computing vpFeatureMomentBasic
121 fmb.update(0.,0.,1.); //update the vpFeatureMoment with a plane
122 //configuration and compute interaction matrix
124 fgc.update(0.,0.,1.); //update the plane configuration for gravity
125 //center feature and compute it's associated matrix.
127 std::cout << fgc.interaction(1 << 1) << std::endl;
133 This code produces the following output:
1350 -1 1.5 3.5 -2.5 -1.5
138 You can also use the shortcut selectors
139vpFeatureMomentGravityCenter::selectXg or
140vpFeatureMomentGravityCenter::selectYg as follows:
143 task.addFeature(db_src.getFeatureGravityNormalized(), db_dst.getFeatureGravityNormalized(),
144 vpFeatureMomentGravityCenter::selectXg() | vpFeatureMomentGravityCenter::selectYg());
146 This feature depends on:
147 - vpFeatureMomentBasic
149 Minimum vpMomentObject order needed to compute this feature: 2.
164 vpFeatureMomentGravityCenter(vpMomentDatabase &database,
double A_,
double B_,
double C_,
165 vpFeatureMomentDatabase *featureMoments = NULL)
166 : vpFeatureMoment(database, A_, B_, C_, featureMoments, 2)
173 const char *
momentName()
const {
return "vpMomentGravityCenter"; }
177 const char *
name()
const {
return "vpFeatureMomentGravityCenter"; }
182 static unsigned int selectXg() {
return 1 << 0; }
187 static unsigned int selectYg() {
return 1 << 1; }
243 const char *
momentName()
const {
return "vpMomentGravityCenter"; }
247 const char *
name()
const {
return "vpFeatureMomentGravityCenter"; }
This class allows to register all feature moments (implemented in vpFeatureMoment....
Functionality computation for gravity center moment feature. Computes the interaction matrix associat...
const char * name() const
vpFeatureMomentGravityCenter(vpMomentDatabase &data_base, double A_, double B_, double C_, vpFeatureMomentDatabase *featureMoments=NULL)
static unsigned int selectXg()
const char * momentName() const
static unsigned int selectYg()
This class defines shared system methods/attributes for 2D moment features but no functional code....
virtual const char * momentName() const =0
virtual const char * name() const =0
vpFeatureMoment(vpMomentDatabase &data_base, double A_=0.0, double B_=0.0, double C_=0.0, vpFeatureMomentDatabase *featureMoments=NULL, unsigned int nbmatrices=1)
virtual void compute_interaction(void)
This class allows to register all vpMoments so they can access each other according to their dependen...