- Timestamp:
- Aug 15, 2023, 4:56:54 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20230313/psLib/src/math/psPolynomial.c
r41896 r42492 806 806 } 807 807 808 // XXX add 1D, 3D, 4D versions809 bool psPolynomial2DRecycle(psPolynomial2D *poly,810 psPolynomialType type,811 unsigned int nX,812 unsigned int nY)813 {814 PS_ASSERT_INT_NONNEGATIVE(nX, NULL);815 PS_ASSERT_INT_NONNEGATIVE(nY, NULL);816 817 bool match = true;818 match &= (poly->type == type);819 match &= (poly->nX == type);820 match &= (poly->nY == type);821 822 if (!match) {823 for (int i = 0; i < poly->nX + 1; i++) {824 psFree (poly->coeff[i]);825 psFree (poly->coeffErr[i]);826 psFree (poly->coeffMask[i]);827 }828 psFree (poly->coeff);829 psFree (poly->coeffErr);830 psFree (poly->coeffMask);831 832 poly->type = type;833 poly->nX = nX;834 poly->nY = nY;835 836 poly->coeff = psAlloc((1 + nX) * sizeof(psF64 *));837 poly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *));838 poly->coeffMask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *));839 for (int i = 0; i < (1 + nX); i++) {840 poly->coeff[i] = psAlloc((1 + nY) * sizeof(psF64));841 poly->coeffErr[i] = psAlloc((1 + nY) * sizeof(psF64));842 poly->coeffMask[i] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType));843 }844 }845 for (int i = 0; i < (1 + nX); i++) {846 for (int j = 0; j < (1 + nY); j++) {847 poly->coeff[i][j] = 0.0;848 poly->coeffErr[i][j] = 0.0;849 poly->coeffMask[i][j] = PS_POLY_MASK_NONE;850 }851 }852 return(true);853 }854 855 // XXX add 1D, 3D, 4D versions856 psPolynomial2D *psPolynomial2DCopy(psPolynomial2D *out,857 psPolynomial2D *poly)858 {859 if (out == NULL) {860 out = psPolynomial2DAlloc (poly->type, poly->nX, poly->nY);861 } else {862 psPolynomial2DRecycle (out, poly->type, poly->nX, poly->nY);863 }864 865 for (int i = 0; i < (1 + poly->nX); i++) {866 for (int j = 0; j < (1 + poly->nY); j++) {867 out->coeff[i][j] = poly->coeff[i][j];868 out->coeffErr[i][j] = poly->coeffErr[i][j];869 out->coeffMask[i][j] = poly->coeffMask[i][j];870 }871 }872 return(out);873 }874 875 808 psPolynomial3D* psPolynomial3DAlloc( 876 809 psPolynomialType type, … … 1002 935 } 1003 936 937 // XXX add 3D, 4D versions 938 bool psPolynomial1DRecycle(psPolynomial1D *poly, 939 psPolynomialType type, 940 unsigned int nX) 941 { 942 PS_ASSERT_INT_NONNEGATIVE(nX, NULL); 943 944 bool match = true; 945 match &= (poly->type == type); 946 match &= (poly->nX == type); 947 948 if (!match) { 949 psFree (poly->coeff); 950 psFree (poly->coeffErr); 951 psFree (poly->coeffMask); 952 953 poly->type = type; 954 poly->nX = nX; 955 956 poly->coeff = psAlloc((1 + nX) * sizeof(psF64)); 957 poly->coeffErr = psAlloc((1 + nX) * sizeof(psF64)); 958 poly->coeffMask = (psMaskType *)psAlloc((1 + nX) * sizeof(psMaskType)); 959 } 960 for (int i = 0; i < (1 + nX); i++) { 961 poly->coeff[i] = 0.0; 962 poly->coeffErr[i] = 0.0; 963 poly->coeffMask[i] = PS_POLY_MASK_NONE; 964 } 965 return(true); 966 } 967 968 bool psPolynomial2DRecycle(psPolynomial2D *poly, 969 psPolynomialType type, 970 unsigned int nX, 971 unsigned int nY) 972 { 973 PS_ASSERT_INT_NONNEGATIVE(nX, NULL); 974 PS_ASSERT_INT_NONNEGATIVE(nY, NULL); 975 976 bool match = true; 977 match &= (poly->type == type); 978 match &= (poly->nX == type); 979 match &= (poly->nY == type); 980 981 if (!match) { 982 for (int i = 0; i < poly->nX + 1; i++) { 983 psFree (poly->coeff[i]); 984 psFree (poly->coeffErr[i]); 985 psFree (poly->coeffMask[i]); 986 } 987 psFree (poly->coeff); 988 psFree (poly->coeffErr); 989 psFree (poly->coeffMask); 990 991 poly->type = type; 992 poly->nX = nX; 993 poly->nY = nY; 994 995 poly->coeff = psAlloc((1 + nX) * sizeof(psF64 *)); 996 poly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *)); 997 poly->coeffMask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *)); 998 for (int i = 0; i < (1 + nX); i++) { 999 poly->coeff[i] = psAlloc((1 + nY) * sizeof(psF64)); 1000 poly->coeffErr[i] = psAlloc((1 + nY) * sizeof(psF64)); 1001 poly->coeffMask[i] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType)); 1002 } 1003 } 1004 for (int i = 0; i < (1 + nX); i++) { 1005 for (int j = 0; j < (1 + nY); j++) { 1006 poly->coeff[i][j] = 0.0; 1007 poly->coeffErr[i][j] = 0.0; 1008 poly->coeffMask[i][j] = PS_POLY_MASK_NONE; 1009 } 1010 } 1011 return(true); 1012 } 1013 1014 // XXX 3D, 4D versions 1015 psPolynomial1D *psPolynomial1DCopy(psPolynomial1D *out, 1016 psPolynomial1D *poly) 1017 { 1018 if (out == NULL) { 1019 out = psPolynomial1DAlloc (poly->type, poly->nX); 1020 } else { 1021 psPolynomial1DRecycle (out, poly->type, poly->nX); 1022 } 1023 1024 for (int i = 0; i < (1 + poly->nX); i++) { 1025 out->coeff[i] = poly->coeff[i]; 1026 out->coeffErr[i] = poly->coeffErr[i]; 1027 out->coeffMask[i] = poly->coeffMask[i]; 1028 } 1029 return(out); 1030 } 1031 psPolynomial2D *psPolynomial2DCopy(psPolynomial2D *out, 1032 psPolynomial2D *poly) 1033 { 1034 if (out == NULL) { 1035 out = psPolynomial2DAlloc (poly->type, poly->nX, poly->nY); 1036 } else { 1037 psPolynomial2DRecycle (out, poly->type, poly->nX, poly->nY); 1038 } 1039 1040 for (int i = 0; i < (1 + poly->nX); i++) { 1041 for (int j = 0; j < (1 + poly->nY); j++) { 1042 out->coeff[i][j] = poly->coeff[i][j]; 1043 out->coeffErr[i][j] = poly->coeffErr[i][j]; 1044 out->coeffMask[i][j] = poly->coeffMask[i][j]; 1045 } 1046 } 1047 return(out); 1048 } 1049 1004 1050 /* note these functions accept unscaled values and apply the scaling saved on poly */ 1005 1051 psF64 psPolynomial1DEval(const psPolynomial1D* poly,
Note:
See TracChangeset
for help on using the changeset viewer.
