NRBDEVAL: Evaluation of the derivative and second derivatives of NURBS curve, surface or volume. [pnt, jac] = nrbdeval (crv, dcrv, tt) [pnt, jac] = nrbdeval (srf, dsrf, {tu tv}) [pnt, jac] = nrbdeval (vol, dvol, {tu tv tw}) [pnt, jac, hess] = nrbdeval (crv, dcrv, dcrv2, tt) [pnt, jac, hess] = nrbdeval (srf, dsrf, dsrf2, {tu tv}) [pnt, jac, hess] = nrbdeval (vol, dvol, dvol2, {tu tv tw}) [pnt, jac, hess, third_der] = nrbdeval (crv, dcrv, dcrv2, dcrv3, tt) [pnt, jac, hess, third_der] = nrbdeval (srf, dsrf, dsrf2, dsrf3, {tu tv}) [pnt, jac, hess, third_der, fourth_der] = nrbdeval (crv, dcrv, dcrv2, dcrv3, dcrv4, tt) [pnt, jac, hess, third_der, fourth_der] = nrbdeval (srf, dsrf, dsrf2, dsrf3, dsrf4, {tu tv}) INPUTS: crv, srf, vol - original NURBS curve, surface or volume. dcrv, dsrf, dvol - NURBS derivative representation of crv, srf or vol (see nrbderiv2) dcrv2, dsrf2, dvol2 - NURBS second derivative representation of crv, srf or vol (see nrbderiv2) dcrv3, dsrf3, dvol3 - NURBS third derivative representation of crv, srf or vol (see nrbderiv) dcrv4, dsrf4, dvol4 - NURBS fourth derivative representation of crv, srf or vol (see nrbderiv) tt - parametric evaluation points If the nurbs is a surface or a volume then tt is a cell {tu, tv} or {tu, tv, tw} are the parametric coordinates OUTPUT: pnt - evaluated points. jac - evaluated first derivatives (Jacobian). hess - evaluated second derivatives (Hessian). third_der - evaluated third derivatives fourth_der - evaluated fourth derivatives Copyright (C) 2000 Mark Spink Copyright (C) 2010 Carlo de Falco Copyright (C) 2010, 2011 Rafael Vazquez Copyright (C) 2018 Luca Coradello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
The following code
crv = nrbtestcrv; nrbplot(crv,48); title('First derivatives along a test curve.'); tt = linspace(0.0,1.0,9); dcrv = nrbderiv(crv); [p1, dp] = nrbdeval(crv,dcrv,tt); p2 = vecnormalize(dp); hold on; plot(p1(1,:),p1(2,:),'ro'); h = quiver(p1(1,:),p1(2,:),p2(1,:),p2(2,:),0); set(h,'Color','black'); hold off;
Produces the following figure
Figure 1 |
---|
The following code
srf = nrbtestsrf; p = nrbeval(srf,{linspace(0.0,1.0,20) linspace(0.0,1.0,20)}); h = surf(squeeze(p(1,:,:)),squeeze(p(2,:,:)),squeeze(p(3,:,:))); set(h,'FaceColor','blue','EdgeColor','blue'); title('First derivatives over a test surface.'); npts = 5; tt = linspace(0.0,1.0,npts); dsrf = nrbderiv(srf); [p1, dp] = nrbdeval(srf, dsrf, {tt, tt}); up2 = vecnormalize(dp{1}); vp2 = vecnormalize(dp{2}); hold on; plot3(p1(1,:),p1(2,:),p1(3,:),'ro'); h1 = quiver3(p1(1,:),p1(2,:),p1(3,:),up2(1,:),up2(2,:),up2(3,:)); h2 = quiver3(p1(1,:),p1(2,:),p1(3,:),vp2(1,:),vp2(2,:),vp2(3,:)); set(h1,'Color','black'); set(h2,'Color','black'); hold off;
Produces the following figure
Figure 1 |
---|
Package: nurbs