// // Created by 14727 on 2022/11/19. // #include "NurbsBasis.cuh" __device__ void d_basisFunction1(float *N_Texture, const float *knots, float u, int degree, int d_knotsCnt) { int m = d_knotsCnt - 1; for (int p = 0; p <= degree; p++) { for (int i = 0; i + p <= m - 1; i++) { if (p == 0) { if ((u > knots[i] || d_floatEqual1(u, knots[i])) && (u < knots[i + 1]) || d_floatEqual1(u, knots[i + 1]) && d_floatEqual1(u, knots[m])) { N_Texture[p * m + i] = 1.0; } else { N_Texture[p * m + i] = 0.0; } } else { float Nip_1 = N_Texture[(p - 1) * m + i]; float Ni1p_1 = N_Texture[(p - 1) * m + i + 1]; float left = d_floatEqual1(knots[i + p], knots[i]) ? 0 : (u - knots[i]) * Nip_1 / (knots[i + p] - knots[i]); float right = d_floatEqual1(knots[i + p + 1], knots[i + 1]) ? 0 : (knots[i + p + 1] - u) * Ni1p_1 / (knots[i + p + 1] - knots[i + 1]); N_Texture[p * m + i] = left + right; } } } } __device__ bool d_floatEqual1(float a, float b) { return abs(a - b) < 0.00001; } void NurbsBasis::myPrint11(int a, int b) { printf("In NurbsBasis %d!!!\n", a * b); }