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.
55 lines
882 B
55 lines
882 B
function [N] = NURBS_2D(xi_1, xi_2, i_1,i_2,p_1,p_2,n_1,n_2,Xi_1,Xi_2,w)
|
|
N_1 = zeros(n_1,1);
|
|
N_2 = zeros(n_2,1);
|
|
|
|
for j = 1:n_1
|
|
N_1(j) = deBoor(xi_1,j,p_1,Xi_1);
|
|
end
|
|
|
|
for j = 1:n_2
|
|
N_2(j) = deBoor(xi_2,j,p_2,Xi_2);
|
|
end
|
|
|
|
[N_2g,N_1g] = meshgrid(N_2,N_1);
|
|
|
|
if size(N_2g)~=size(w)
|
|
N_1g = N_1g';
|
|
N_2g = N_2g';
|
|
end
|
|
|
|
R = N_1(i_1)*N_2(i_2)*w(i_1,i_2)/(sum(sum(N_1g.*N_2g.*w)));
|
|
|
|
N = R;
|
|
|
|
|
|
return
|
|
|
|
function [N] = deBoor(xi, i, p, Xi)
|
|
if p==0
|
|
|
|
if xi==Xi(i) && xi==Xi(i+1)
|
|
N = 0;
|
|
elseif xi>=Xi(i) && xi<=Xi(i+1)
|
|
N = 1;
|
|
else
|
|
N = 0;
|
|
end
|
|
|
|
else
|
|
if Xi(i) ==Xi(i+p)
|
|
f = 0;
|
|
else
|
|
f = (xi - Xi(i))/(Xi(i+p)-Xi(i));
|
|
end
|
|
|
|
if Xi(i+1) == Xi(i+p+1)
|
|
g = 0;
|
|
else
|
|
g = (Xi(i+p+1)-xi)/(Xi(i+p+1)-Xi(i+1));
|
|
end
|
|
|
|
N = f*deBoor(xi,i,p-1,Xi) + g*deBoor(xi,i+1,p-1,Xi);
|
|
|
|
end
|
|
|
|
return
|