inline int fdct3d_globalpou(float tht, float phi, float buf, float& pou) { float lt = M_PI/4 - buf; float rt = M_PI/4 + buf; if(abs(tht)<=lt && abs(phi)<=lt) pou = 1; else if(abs(tht)>=rt || abs(phi)>=rt) pou = 0; else { float tt = tan(abs(tht)); float tp = tan(abs(phi)); float pa[2]; pa[0] = abs(tht); pa[1] = abs(phi); float pb[2]; pb[0] = atan2(tp,tt); pb[1] = atan2(1,tt); float pc[2]; pc[0] = atan2(tt,tp); pc[1] = atan2(1,tp); float sa; fdct3d_globalpou_shape(lt, rt, pa[0], pa[1], sa); float sb; fdct3d_globalpou_shape(lt, rt, pb[0], pb[1], sb); float sc; fdct3d_globalpou_shape(lt, rt, pc[0], pc[1], sc); pou = sqrt(sa/(sa+sb+sc)); } return 0; }
inline int fdct3d_globalpou(double tht, double phi, double buf, double& pou) { double lt = M_PI/4 - buf; double rt = M_PI/4 + buf; if(abs(tht)<=lt && abs(phi)<=lt) pou = 1; else if(abs(tht)>=rt || abs(phi)>=rt) pou = 0; else { double tt = tan(abs(tht)); double tp = tan(abs(phi)); double pa[2]; pa[0] = abs(tht); pa[1] = abs(phi); double pb[2]; pb[0] = atan2(tp,tt); pb[1] = atan2(1,tt); double pc[2]; pc[0] = atan2(tt,tp); pc[1] = atan2(1,tp); double sa; fdct3d_globalpou_shape(lt, rt, pa[0], pa[1], sa); double sb; fdct3d_globalpou_shape(lt, rt, pb[0], pb[1], sb); double sc; fdct3d_globalpou_shape(lt, rt, pc[0], pc[1], sc); pou = sqrt(sa/(sa+sb+sc)); } return 0; }