Mercurial > forge
view extra/nurbs/inst/private/nrb_crv_basisfun_der__.m @ 11689:a5e636ebf237 octave-forge
Fixed bug for one single point. Compute function value and derivative with basisfunder
author | rafavzqz |
---|---|
date | Wed, 08 May 2013 12:49:14 +0000 |
parents | 97806581afd6 |
children |
line wrap: on
line source
function [Bu, nbfu] = nrb_crv_basisfun_der__ (points, nrb) % __NRB_CRV_BASISFUN_DER__: Undocumented internal function % % Copyright (C) 2009 Carlo de Falco % Copyright (C) 2013 Rafael Vazquez % % This software comes with ABSOLUTELY NO WARRANTY; see the file % COPYING for details. This is free software, and you are welcome % to distribute it under the conditions laid out in COPYING. n = size (nrb.coefs, 2) -1; p = nrb.order -1; u = points; U = nrb.knots; w = nrb.coefs(4,:); spu = findspan (n, p, u, U); nbfu = numbasisfun (spu, u, p, U); Nprime = basisfunder (spu, p, u, U, 1); N = reshape (Nprime(:,1,:), numel(u), p+1); Nprime = reshape (Nprime(:,2,:), numel(u), p+1); [Dpc, Dpk] = bspderiv (p, w, U); D = bspeval (p, w, U, u); Dprime = bspeval (p-1, Dpc, Dpk, u); Bu1 = bsxfun (@(np, d) np/d , Nprime.', D); Bu2 = bsxfun (@(n, dp) n*dp, N.', Dprime./D.^2); Bu = w(nbfu+1) .* (Bu1 - Bu2).'; end