1 function [Bu, Bv, N] = nrb_srf_basisfun_der__ (points, nrb);
3 % __NRB_SRF_BASISFUN_DER__: Undocumented internal function
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.
10 m = size (nrb.coefs, 2) -1;
11 n = size (nrb.coefs, 3) -1;
23 w = squeeze(nrb.coefs(4,:,:));
25 spu = findspan (m, p, u, U);
26 spv = findspan (n, q, v, V);
27 N = nrbnumbasisfun (points, nrb);
29 NuIkuk = basisfun (spu, u, p, U);
30 NvJkvk = basisfun (spv, v, q, V);
32 NuIkukprime = basisfunder (spu, p, u, U, 1);
33 NuIkukprime = reshape (NuIkukprime(:,2,:), npt, []);
35 NvJkvkprime = basisfunder (spv, q, v, V, 1);
36 NvJkvkprime = reshape (NvJkvkprime(:,2,:), npt, []);
39 wIkaJkb(1:p+1, 1:q+1) = reshape (w(N(k, :)), p+1, q+1);
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));
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,[]);