#include #include #include #include "c_legendrecoefs.c" static const float amsleg_pif = 3.14159265359; static const double amsleg_pi = 3.14159265359; float amsleg_polyvalf(float x, const float *coefs, int polyorder) { float ret = 0.0f; float xv = 1.0f; int I; for(I=0;I<=polyorder;I++) { //printf("debug: %d %1.6g\n",I,coefs[I]); ret = ret + coefs[I]*xv; xv = xv * x; } return ret; } double amsleg_polyval(double x, const double *coefs, int polyorder) { double ret = 0.0; double xv = 1.0; int I; for(I=0;I<=polyorder;I++) { ret = ret + coefs[I]*xv; xv = xv * x; } return ret; } //Schmidt Quasi-Normalized Legendre Function P^n_m(x) //for degree n, and order m, m<=n //n from 0 to 20 //m from 0 to n float amsleg_legendref(float x, int n, int m) { float ret = 0.0f; int I, mo2, mr, ind; float mpart = 1.0f; float ppart = 0.0f; const float *coefptr = NULL; if(x<-1.0f) x=-1.0f; if(x>1.0f) x = 1.0f; if(m<0) { m = -m; } if(m>n || n<0 || n>20) { ret = 0.0f; return ret; } if(m>0) { mo2 = m/2; mr = (m%2==1); for(I=0;I1.0f) x = 1.0f; if(m<0) { m = -m; } if(m>n || n<0 || n>20) { ret = 0.0f; return ret; } if(m>0) { mo2 = m/2; mr = (m%2==1); for(I=0;I