Mercurial > forge
changeset 9605:4fa3d0a20d75 octave-forge
Fixed the bug. Still to improve onebasisfunder__
author | rafavzqz |
---|---|
date | Thu, 08 Mar 2012 17:52:40 +0000 |
parents | 88b9ad90dba5 |
children | 33ed042002f9 |
files | extra/nurbs/src/tbasisfun.cc |
diffstat | 1 files changed, 28 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/extra/nurbs/src/tbasisfun.cc Thu Mar 08 17:48:03 2012 +0000 +++ b/extra/nurbs/src/tbasisfun.cc Thu Mar 08 17:52:40 2012 +0000 @@ -150,20 +150,24 @@ Cell C = args(2).cell_value (); RowVector U = C(0).row_vector_value (true, true); RowVector V = C(1).row_vector_value (true, true); - double Nu, Nv; - for (octave_idx_type ii=0; ii<u.cols (); ii++) - { - Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U); - Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V); - N(ii) = Nu * Nv; + if (nargout == 1) { + for (octave_idx_type ii=0; ii<u.cols (); ii++) + { + N(ii) = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U) * + onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V); //std::cout << "N=" << N(ii) << "\n\n\n"; - } - - if (nargout == 2) { + } + } + else if (nargout == 2) { + double Nu, Nv; Matrix Nder (2, u.cols()); for (octave_idx_type ii=0; ii<u.cols (); ii++) { + Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U); + Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V); + N(ii) = Nu * Nv; + Nder(0,ii) = onebasisfunder__ (u(0, ii), octave_idx_type(p(0)), U) * Nv; Nder(1,ii) = onebasisfunder__ (u(1, ii), octave_idx_type(p(1)), V) * @@ -171,28 +175,32 @@ //std::cout << "N=" << N(ii) << "\n\n\n"; } retval(1) = Nder; - } + } } else if (p.length() == 3) { Cell C = args(2).cell_value (); RowVector U = C(0).row_vector_value (true, true); RowVector V = C(1).row_vector_value (true, true); RowVector W = C(2).row_vector_value (true, true); - double Nu, Nv, Nw; - for (octave_idx_type ii=0; ii<u.cols (); ii++) - { - Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U); - Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V); - Nw = onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W); - N(ii) = Nu * Nv * Nw; + if (nargout == 1) { + for (octave_idx_type ii=0; ii<u.cols (); ii++) + { + N(ii) = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U) * + onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V) * + onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W); //std::cout << "N=" << N(ii) << "\n\n\n"; - } - - if (nargout == 2) { + } + } + else if (nargout == 2) { + double Nu, Nv, Nw; Matrix Nder (3, u.cols()); for (octave_idx_type ii=0; ii<u.cols (); ii++) { + Nu = onebasisfun__ (u(0, ii), octave_idx_type(p(0)), U); + Nv = onebasisfun__ (u(1, ii), octave_idx_type(p(1)), V); + Nw = onebasisfun__ (u(2, ii), octave_idx_type(p(2)), W); + N(ii) = Nu * Nv * Nw; Nder(0,ii) = onebasisfunder__ (u(0, ii), octave_idx_type(p(0)), U) * Nv * Nw; Nder(1,ii) = onebasisfunder__ (u(1, ii), octave_idx_type(p(1)), V) *