Introduction
The c++ (cpp) vpmomentcentered example is extracted from the most popular open source projects, you can refer to the following example for usage.
Programming language: C++ (Cpp)
Class/type: vpMomentCentered
Example#1File:
vpMomentCInvariant.cppProject:
GVallicrosa/Armed-turtlebot
/*!
Computes some temporary invariants which are used internally to compute the final invariants.
\param momentCentered : centered moments
\param I : invariant output values
*/
void vpMomentCInvariant::computeI(vpMomentCentered& momentCentered, std::vector<double>& I){
double mu30 = momentCentered.get(3,0);
double mu30_2 = mu30*mu30;
double mu03 = momentCentered.get(0,3);
double mu03_2 = mu03*mu03;
double mu03_3 = mu03*mu03_2;
double mu20 = momentCentered.get(2,0);
double mu02 = momentCentered.get(0,2);
double mu50 = momentCentered.get(5,0);
double mu32 = momentCentered.get(3,2);
double mu14 = momentCentered.get(1,4);
double mu05 = momentCentered.get(0,5);
double mu23 = momentCentered.get(2,3);
double mu41 = momentCentered.get(4,1);
double mu40 = momentCentered.get(4,0);
double mu04 = momentCentered.get(0,4);
double mu31 = momentCentered.get(3,1);
double mu13 = momentCentered.get(1,3);
double mu22 = momentCentered.get(2,2);
double mu21 = momentCentered.get(2,1);
double mu12 = momentCentered.get(1,2);
double mu11 = momentCentered.get(1,1);
double mu11_2 = mu11*mu11;
double mu12_2 = mu12*mu12;
double mu21_2 = mu21*mu21;
double mu22_2 = mu22*mu22;
double mu13_2 = mu13*mu13;
double mu31_2 = mu31*mu31;
double mu04_2 = mu04*mu04;
double mu40_2 = mu40*mu40;
double mu21_3 = mu21*mu21_2;
double mu12_3 = mu12_2*mu12;
double mu12_4 = mu12_3*mu12;
double mu21_4 = mu21_2*mu21_2;
double kappa = mu30_2+mu03_2-3*mu21_2+6*mu21*mu03;
double zeta = mu20-mu02;
double zeta_2 = zeta * zeta;
double omicron = (mu03_2+3*mu03*mu21+mu30*(mu30+3*mu12));
double omega = mu50+2*mu32+mu14;
double nu = mu05+2*mu23+mu41;
double ro = mu50-2*mu32-3*mu14;
double gamma = mu05-2*mu23-3*mu41;
double delta = mu50-10*mu32+5*mu14;
double phi = mu05-10*mu23+5*mu41;
double omega_2 = omega*omega;
double nu_2 = nu*nu;
double ro_2 = ro*ro;
double gamma_2 = gamma*gamma;
double delta_2 = delta*delta;
double phi_2 = phi*phi;
I[1]=-mu20*mu02+mu11_2;
I[2]=zeta_2+4*mu11_2;
I[3]=(mu30-3*mu12)*(mu30-3*mu12)+(mu03-3*mu21)*(mu03-3*mu21);
I[4]=(mu30+mu12)*(mu30+mu12)+(mu21+mu03)*(mu21+mu03);
I[5]=-mu30_2*mu03_2+(-4*mu12_3+6*mu21*mu12*mu03)*mu30-4*mu21_3*mu03+3*mu21_2*mu12_2;
I[6]=3*mu12_4+2*mu30*mu12_3+(3*mu30_2-6*mu03*mu21)*mu12_2-6*mu30*mu21*(mu21+mu03)*mu12+2*mu30_2*mu03_2+2*mu21_3*mu03+3*mu21_2*mu03_2+3*mu21_4;
I[7]=(3*mu21+2*mu03)*mu12_3+3*mu30*(mu03+2*mu21)*mu12_2-3*mu21*(mu30+mu03+mu21)*(-mu30+mu03+mu21)*mu12+mu30*(-mu30_2*mu03-2*mu21_3-3*mu03*mu21_2+mu03_3);
I[8]=3*mu21_4-3*mu21_3*mu03+(3*mu03_2+kappa-6*mu12_2)*mu21_2-mu03*(-15*mu12_2+kappa)*mu21-(-3*mu12_2*mu30+(2*kappa-3*mu03_2)*mu12+kappa*mu30)*mu12;
I[9]=omicron*omicron;
I[10]=mu40*mu04-4*mu31*mu13+3*mu22_2;
I[11]=3*mu13_2+2*mu31*mu13+(-3*mu40-3*mu04)*mu22-2*mu40*mu04+3*mu31_2;
I[12]=3*mu04_2+(2*mu40+12*mu22)*mu04+3*mu40_2+12*mu40*mu22+16*mu31*mu13;
I[13]=omega_2+nu_2;
I[14]=ro_2+gamma_2;
I[15]=delta_2+phi_2;
double a;
if(getObject().getType()==vpMomentObject::DISCRETE)
a = momentCentered.get(2,0)+momentCentered.get(0,2);
else
a = getObject().get(0,0);
c[1]=momentCentered.get(2,0)-momentCentered.get(0,2);
s[1]=2*momentCentered.get(1,1);
c[2]=momentCentered.get(0,3)-3*momentCentered.get(2,1);
s[2]=momentCentered.get(3,0)-3*momentCentered.get(1,2);
c[3]=c[1]*c[1]-s[1]*s[1];
s[3]=2*s[1]*c[1];
II[1]=c[1]*c[1]+s[1]*s[1];
II[2]=c[2]*c[2]+s[2]*s[2];
II[3]=momentCentered.get(2,0)+momentCentered.get(0,2);
K=(II[1]*(II[3]*sqrt(II[3])))/sqrt(a);
}
Example#2File:
vpMomentCInvariant.cppProject:
976717326/visp
/*!
Computes some temporary invariants which are used internally to compute the final invariants.
\param momentCentered : centered moments
\param I : invariant output values
*/
void vpMomentCInvariant::computeI(const vpMomentCentered& momentCentered, std::vector<double>& I_val){
double mu30 = momentCentered.get(3,0);
double mu30_2 = mu30*mu30;
double mu30_3 = mu30_2*mu30;
double mu03 = momentCentered.get(0,3);
double mu03_2 = mu03*mu03;
double mu03_3 = mu03*mu03_2;
double mu20 = momentCentered.get(2,0);
double mu02 = momentCentered.get(0,2);
double mu50 = momentCentered.get(5,0);
double mu32 = momentCentered.get(3,2);
double mu14 = momentCentered.get(1,4);
double mu05 = momentCentered.get(0,5);
double mu23 = momentCentered.get(2,3);
double mu41 = momentCentered.get(4,1);
double mu40 = momentCentered.get(4,0);
double mu04 = momentCentered.get(0,4);
double mu31 = momentCentered.get(3,1);
double mu13 = momentCentered.get(1,3);
double mu22 = momentCentered.get(2,2);
double mu21 = momentCentered.get(2,1);
double mu12 = momentCentered.get(1,2);
double mu11 = momentCentered.get(1,1);
double mu11_2 = mu11*mu11;
double mu12_2 = mu12*mu12;
double mu21_2 = mu21*mu21;
double mu22_2 = mu22*mu22;
double mu13_2 = mu13*mu13;
double mu31_2 = mu31*mu31;
double mu04_2 = mu04*mu04;
double mu40_2 = mu40*mu40;
double mu21_3 = mu21*mu21_2;
double mu12_3 = mu12_2*mu12;
double mu12_4 = mu12_3*mu12;
double mu21_4 = mu21_2*mu21_2;
//double kappa = mu30_2+mu03_2-3*mu21_2+6*mu21*mu03; //Used in I8 calculation but simplified with MAPLE and found it to be wrong
double zeta = mu20-mu02;
double zeta_2 = zeta * zeta;
double omicron = (mu03_2+3*mu03*mu21+mu30*(mu30+3*mu12));
double omega = mu50+2*mu32+mu14;
double nu = mu05+2*mu23+mu41;
double ro = mu50-2*mu32-3*mu14;
double gamma = mu05-2*mu23-3*mu41;
double delta = mu50-10*mu32+5*mu14;
double phi = mu05-10*mu23+5*mu41;
double omega_2 = omega*omega;
double nu_2 = nu*nu;
double ro_2 = ro*ro;
double gamma_2 = gamma*gamma;
double delta_2 = delta*delta;
double phi_2 = phi*phi;
I_val[1]=-mu20*mu02+mu11_2;
I_val[2]=zeta_2+4*mu11_2;
I_val[3]=(mu30-3*mu12)*(mu30-3*mu12)+(mu03-3*mu21)*(mu03-3*mu21);
I_val[4]=(mu30+mu12)*(mu30+mu12)+(mu21+mu03)*(mu21+mu03);
I_val[5]=-mu30_2*mu03_2+(-4*mu12_3+6*mu21*mu12*mu03)*mu30-4*mu21_3*mu03+3*mu21_2*mu12_2;
I_val[6]=3*mu12_4+2*mu30*mu12_3+(3*mu30_2-6*mu03*mu21)*mu12_2-6*mu30*mu21*(mu21+mu03)*mu12+2*mu30_2*mu03_2+2*mu21_3*mu03+3*mu21_2*mu03_2+3*mu21_4;
I_val[7]=(3*mu21+2*mu03)*mu12_3+3*mu30*(mu03+2*mu21)*mu12_2-3*mu21*(mu30+mu03+mu21)*(-mu30+mu03+mu21)*mu12+mu30*(-mu30_2*mu03-2*mu21_3-3*mu03*mu21_2+mu03_3);
//I_val[8]=3*mu21_4-3*mu21_3*mu03+(3*mu03_2+kappa-6*mu12_2)*mu21_2-mu03*(-15*mu12_2+kappa)*mu21-(-3*mu12_2*mu30+(2*kappa-3*mu03_2)*mu12+kappa*mu30)*mu12;
I_val[8] = 3*mu03*mu21_3-2*mu03_2*mu21_2+mu21_2*mu30_2+3*mu12_2*mu03*mu21-mu03*mu21*mu30_2-mu03_3*mu21+3*mu12_3*mu30-2*mu12_2*mu30_2+mu12_2*mu03_2-mu12*mu30_3-mu12*mu30*mu03_2+3*mu12*mu30*mu21_2-6*mu12*mu30*mu03*mu21;
I_val[9]=omicron*omicron;
I_val[10]=mu40*mu04-4*mu31*mu13+3*mu22_2;
I_val[11]=3*mu13_2+2*mu31*mu13+(-3*mu40-3*mu04)*mu22-2*mu40*mu04+3*mu31_2;
I_val[12]=3*mu04_2+(2*mu40+12*mu22)*mu04+3*mu40_2+12*mu40*mu22+16*mu31*mu13;
I_val[13]=omega_2+nu_2;
I_val[14]=ro_2+gamma_2;
I_val[15]=delta_2+phi_2;
double a;
if(getObject().getType()==vpMomentObject::DISCRETE)
a = momentCentered.get(2,0)+momentCentered.get(0,2);
else
a = getObject().get(0,0);
c[1]=momentCentered.get(2,0)-momentCentered.get(0,2);
s[1]=2*momentCentered.get(1,1);
c[2]=momentCentered.get(0,3)-3*momentCentered.get(2,1);
s[2]=momentCentered.get(3,0)-3*momentCentered.get(1,2);
c[3]=c[1]*c[1]-s[1]*s[1];
s[3]=2*s[1]*c[1];
II[1]=c[1]*c[1]+s[1]*s[1];
II[2]=c[2]*c[2]+s[2]*s[2];
II[3]=momentCentered.get(2,0)+momentCentered.get(0,2);
K=(II[1]*(II[3]*sqrt(std::abs(II[3]))))/sqrt(std::abs(a));
/*
* Intermediate quantities required for calculation of normalized version of Sx and Sy
* The pij doubles below are the respective centered moment values mu_ij scaled by mu20 + mu02
*/
double p20 = momentCentered.get(2,0)/II[3]; // II[3] is the normalization factor for the 2nd order moments
double p11 = momentCentered.get(1,1)/II[3];
double p02 = momentCentered.get(0,2)/II[3];
double d = sqrt(std::abs(a))/(II[3]*sqrt(std::abs(II[3]))); // d is the normalization factor for 3rd order moments
double p30 = momentCentered.get(3,0)*d;
double p21 = momentCentered.get(2,1)*d;
double p12 = momentCentered.get(1,2)*d;
double p03 = momentCentered.get(0,3)*d;
cn[1] = p20 - p02;
sn[1] = 2.0*p11;
sn[2] = p30 - 3.0*p12;
cn[2] = p03 - 3.0*p21;
cn[3] = cn[1]*cn[1]-sn[1]*sn[1];
sn[3] = 2.0*sn[1]*cn[1];
In1 = cn[1]*cn[1]+sn[1]*sn[1];
}