You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.5 KiB
39 lines
1.5 KiB
2 years ago
|
//
|
||
|
// 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);
|
||
|
}
|