]> Creatis software - CreaPhase.git/blob - octave_packages/nurbs-1.3.6/private/nrb_srf_basisfun_der__.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / nurbs-1.3.6 / private / nrb_srf_basisfun_der__.m
1 function [Bu, Bv, N] = nrb_srf_basisfun_der__ (points, nrb);
2
3 %  __NRB_SRF_BASISFUN_DER__: Undocumented internal function
4 %
5 %   Copyright (C) 2009 Carlo de Falco
6 %   This software comes with ABSOLUTELY NO WARRANTY; see the file
7 %   COPYING for details.  This is free software, and you are welcome
8 %   to distribute it under the conditions laid out in COPYING.
9
10   m    = size (nrb.coefs, 2) -1;
11   n    = size (nrb.coefs, 3) -1;
12   
13   p    = nrb.order(1) -1;
14   q    = nrb.order(2) -1;
15   
16   u = points(1,:);
17   v = points(2,:);
18   npt = length(u);
19   
20   U    = nrb.knots{1};
21   V    = nrb.knots{2};
22   
23   w    = squeeze(nrb.coefs(4,:,:));
24   
25   spu  =  findspan (m, p, u, U); 
26   spv  =  findspan (n, q, v, V);
27   N    =  nrbnumbasisfun (points, nrb);
28
29   NuIkuk = basisfun (spu, u, p, U); 
30   NvJkvk = basisfun (spv, v, q, V);
31   
32   NuIkukprime = basisfunder (spu, p, u, U, 1);
33   NuIkukprime = reshape (NuIkukprime(:,2,:), npt, []);
34   
35   NvJkvkprime = basisfunder (spv, q, v, V, 1);
36   NvJkvkprime = reshape (NvJkvkprime(:,2,:), npt, []);
37   
38   for k=1:npt
39     wIkaJkb(1:p+1, 1:q+1) = reshape (w(N(k, :)), p+1, q+1);
40     
41     Num    = (NuIkuk(k, :).' * NvJkvk(k, :)) .* wIkaJkb;
42     Num_du = (NuIkukprime(k, :).' * NvJkvk(k, :)) .* wIkaJkb;
43     Num_dv = (NuIkuk(k, :).' * NvJkvkprime(k, :)) .* wIkaJkb;
44     Denom  = sum(sum(Num));
45     Denom_du = sum(sum(Num_du));
46     Denom_dv = sum(sum(Num_dv));
47     
48     Bu(k, :) = reshape((Num_du/Denom - Denom_du.*Num/Denom.^2),1,[]);
49     Bv(k, :) = reshape((Num_dv/Denom - Denom_dv.*Num/Denom.^2),1,[]);
50   end
51   
52 end