]> Creatis software - CreaPhase.git/blob - octave_packages/nurbs-1.3.6/private/nrb_srf_basisfun__.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / nurbs-1.3.6 / private / nrb_srf_basisfun__.m
1 function [B, N] = nrb_srf_basisfun__ (points, nrb);
2
3 %  __NRB_SRF_BASISFUN__: 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     NuIkuk = basisfun (spu, u, p, U);
28     NvJkvk = basisfun (spv, v, q, V);
29
30     indIkJk = nrbnumbasisfun (points, nrb);
31
32     for k=1:npt
33       wIkaJkb(1:p+1, 1:q+1) = reshape (w(indIkJk(k, :)), p+1, q+1); 
34       NuIkukaNvJkvk(1:p+1, 1:q+1) = (NuIkuk(k, :).' * NvJkvk(k, :));
35       RIkJk(k, :) = reshape((NuIkukaNvJkvk .* wIkaJkb ./ sum(sum(NuIkukaNvJkvk .* wIkaJkb))),1,[]);
36     end
37     
38     B = RIkJk;
39     N = indIkJk;
40     
41   end