1 ## Copyright (C) 2010, 2011, 2012 Lukas F. Reichlin
3 ## This program is free software: you can redistribute it and/or modify
4 ## it under the terms of the GNU General Public License as published by
5 ## the Free Software Foundation, either version 3 of the License, or
6 ## (at your option) any later version.
8 ## This program is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 ## GNU General Public License for more details.
13 ## You should have received a copy of the GNU General Public License
14 ## along with this program. If not, see <http://www.gnu.org/licenses/>.
17 ## Subscripted reference for quaternions. Used by Octave for "q.w".
19 ## Author: Lukas Reichlin <lukas.reichlin@gmail.com>
23 function ret = subsref (q, s)
32 switch (tolower (s(1).subs))
33 case {"w", "s"} # scalar part
34 ret = subsref (q.w, s(2:end));
36 ret = subsref (q.x, s(2:end));
38 ret = subsref (q.y, s(2:end));
40 ret = subsref (q.z, s(2:end));
41 case "v" # vector part, scalar part set to zero
42 q.w = zeros (size (q.w));
43 ret = subsref (q, s(2:end));
45 error ("quaternion: invalid subscript name '%s'", s(1).subs);
49 w = subsref (q.w, s(1));
50 x = subsref (q.x, s(1));
51 y = subsref (q.y, s(1));
52 z = subsref (q.z, s(1));
53 tmp = quaternion (w, x, y, z);
54 ret = subsref (tmp, s(2:end));
57 error ("quaternion: invalid subscript type '%s'", s(1).type);