annotate extra/nurbs/src/basisfun.cc @ 12672:59e8aae64812 octave-forge

prepare for release
author cdf
date Mon, 17 Aug 2015 10:23:44 +0000
parents 37d08939bb7b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
1 /* Copyright (C) 2009 Carlo de Falco
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
2
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
3 This program is free software: you can redistribute it and/or modify
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
4 it under the terms of the GNU General Public License as published by
11634
37d08939bb7b apply changes requested by David
cdf
parents: 6958
diff changeset
5 the Free Software Foundation, either version 3 of the License, or
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
6 (at your option) any later version.
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
7
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
8 This program is distributed in the hope that it will be useful,
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
11 GNU General Public License for more details.
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
12
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
13 You should have received a copy of the GNU General Public License
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
14 along with this program. If not, see <http://www.gnu.org/licenses/>.
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
15 */
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
16
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
17 #include <octave/oct.h>
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
18 #include "low_level_functions.h"
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
19
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
20 DEFUN_DLD(basisfun, args, nargout, "\n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
21 BASISFUN: Compute B-Spline Basis Functions \n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
22 \n\
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
23 Calling Sequence:\n\
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
24 \n\
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
25 N = basisfun(iv,uv,p,U)\n\
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
26 \n\
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
27 INPUT:\n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
28 \n\
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
29 iv - knot span ( from FindSpan() )\n\
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
30 uv - parametric point\n\
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
31 p - spline degree\n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
32 U - knot sequence\n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
33 \n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
34 OUTPUT:\n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
35 \n\
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
36 N - Basis functions vector(numel(uv)*(p+1))\n\
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
37 \n\
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
38 Algorithm A2.2 from 'The NURBS BOOK' pg70.\n\
6958
23ff23c91d06 Slight modifications in the help
rafavzqz
parents: 5683
diff changeset
39 \n\
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
40 ")
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
41 {
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
42
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
43 octave_value_list retval;
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
44 const NDArray i = args(0).array_value();
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
45 const NDArray u = args(1).array_value();
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
46 int p = args(2).idx_type_value();
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
47 const RowVector U = args(3).row_vector_value();
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
48 RowVector N(p+1, 0.0);
12672
59e8aae64812 prepare for release
cdf
parents: 11634
diff changeset
49 Matrix B(u.numel (), p+1, 0.0);
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
50
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
51 if (!error_state)
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
52 {
12672
59e8aae64812 prepare for release
cdf
parents: 11634
diff changeset
53 for (octave_idx_type ii(0); ii < u.numel (); ii++)
5683
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
54 {
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
55 basisfun(int(i(ii)), u(ii), p, U, N);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
56 B.insert(N, ii, 0);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
57 }
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
58
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
59 retval(0) = octave_value(B);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
60 }
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
61 return retval;
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
62 }
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
63
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
64 /*
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
65 %!shared n, U, p, u, s
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
66 %!test
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
67 %! n = 3;
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
68 %! U = [0 0 0 1/2 1 1 1];
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
69 %! p = 2;
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
70 %! u = linspace(0, 1, 10);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
71 %! s = findspan(n, p, u, U);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
72 %! assert (s, [2*ones(1, 5) 3*ones(1, 5)]);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
73 %!test
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
74 %! Bref = [1.00000 0.00000 0.00000
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
75 %! 0.60494 0.37037 0.02469
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
76 %! 0.30864 0.59259 0.09877
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
77 %! 0.11111 0.66667 0.22222
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
78 %! 0.01235 0.59259 0.39506
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
79 %! 0.39506 0.59259 0.01235
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
80 %! 0.22222 0.66667 0.11111
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
81 %! 0.09877 0.59259 0.30864
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
82 %! 0.02469 0.37037 0.60494
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
83 %! 0.00000 0.00000 1.00000];
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
84 %! B = basisfun(s, u, p, U);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
85 %! assert (B, Bref, 1e-5);
be2ec0458410 separate oct files for low level functions
cdf
parents:
diff changeset
86 */