Ejemplo n.º 1
0
void QuatToEuler2(float x,float y,float z,float w,float &pitch,float& yaw,float& roll){
	float sint=(2.0*w*y)-(2.0*x*z);
	float cost_temp=1.0-(sint*sint);
	float cost;
	if (abs(cost_temp)>QuatToEulerAccuracy){
		cost=sqrt(cost_temp);
	}else{
		cost=0.0;
	}
	float sinv,cosv,sinf,cosf;
	if (abs(cost)>QuatToEulerAccuracy){
		sinv=((2.0*y*z)+(2.0*w*x))/cost;
		cosv=(1.0-(2.0*x*x)-(2.0*y*y))/cost;
		sinf=((2.0*x*y)+(2.0*w*z))/cost;
		cosf=(1.0-(2.0*y*y)-(2.0*z*z))/cost;
	}else{
		sinv=(2.0*w*x)-(2.0*y*z);
		cosv=1.0-(2.0*x*x)-(2.0*z*z);
		sinf=0.0;
		cosf=1.0;
	}
	pitch=atan2deg(sint,cost);
	yaw=atan2deg(sinf,cosf);
	roll=-atan2deg(sinv,cosv);
}
Ejemplo n.º 2
0
double LCMSEXPORT cmsCIE2000DeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2,
                                  double Kl, double Kc, double Kh)
{
    double L1  = Lab1->L;
    double a1  = Lab1->a;
    double b1  = Lab1->b;
    double C   = sqrt( Sqr(a1) + Sqr(b1) );

    double Ls = Lab2 ->L;
    double as = Lab2 ->a;
    double bs = Lab2 ->b;
    double Cs = sqrt( Sqr(as) + Sqr(bs) );


    double G = 0.5 * ( 1 - sqrt(pow((C + Cs) / 2 , 7.0) / (pow((C + Cs) / 2, 7.0) + pow(25.0, 7.0) ) ));

    double a_p = (1 + G ) * a1;
    double b_p = b1;
    double C_p = sqrt( Sqr(a_p) + Sqr(b_p));
    double h_p = atan2deg(a_p, b_p); 
                

    double a_ps = (1 + G) * as;
    double b_ps = bs;
    double C_ps = sqrt(Sqr(a_ps) + Sqr(b_ps));
    double h_ps = atan2deg(a_ps, b_ps);
    
    
           
    double meanC_p =(C_p + C_ps) / 2;

    double meanh_p = fabs(h_ps-h_p) <= 180 ? (h_ps + h_p)/2 : (h_ps+h_p-360)/2;

    double delta_h = fabs(h_p - h_ps) <= 180 ? fabs(h_p - h_ps) : 360 - fabs(h_p - h_ps);
    double delta_L = fabs(L1 - Ls);
    double delta_C = fabs(C_p - C_ps);

    double delta_H =2 * sqrt(C_ps*C_p) * sin(RADIANES(delta_h) / 2);

    double T = 1 - 0.17 * cos(RADIANES(meanh_p-30)) 
                 + 0.24 * cos(RADIANES(2*meanh_p))  
                 + 0.32 * cos(RADIANES(3*meanh_p + 6)) 
                 - 0.2  * cos(RADIANES(4*meanh_p - 63));

    double Sl = 1 + (0.015 * Sqr((Ls + L1) /2- 50) )/ sqrt(20 + Sqr( (Ls+L1)/2 - 50) );

    double Sc = 1 + 0.045 * (C_p + C_ps)/2;
    double Sh = 1 + 0.015 * ((C_ps + C_p)/2) * T;

    double delta_ro = 30 * exp( -Sqr(((meanh_p - 275 ) / 25)));

    double Rc = 2 * sqrt(( pow(meanC_p, 7.0) )/( pow(meanC_p, 7.0) + pow(25.0, 7.0)));

    double Rt = -sin(2 * RADIANES(delta_ro)) * Rc;

    double deltaE00 = sqrt( Sqr(delta_L /(Sl * Kl)) + 
                            Sqr(delta_C/(Sc * Kc))  + 
                            Sqr(delta_H/(Sh * Kh))  + 
                            Rt*(delta_C/(Sc * Kc)) * (delta_H / (Sh * Kh)));

    return deltaE00;
}