[37] | 1 | function r = eq(a, b) |
---|
| 2 | % == Equal. |
---|
| 3 | % (Quaternion overloading of standard Matlab function.) |
---|
| 4 | % |
---|
| 5 | % If one of the operands is not a quaternion and the other has zero vector part, |
---|
| 6 | % the result is obtained by comparing the non-quaternion operand with the scalar |
---|
| 7 | % part of the quaternion operand. |
---|
| 8 | |
---|
| 9 | % Copyright © 2005 Stephen J. Sangwine and Nicolas Le Bihan. |
---|
| 10 | % See the file : Copyright.m for further details. |
---|
| 11 | |
---|
| 12 | error(nargchk(2, 2, nargin)), error(nargoutchk(0, 1, nargout)) |
---|
| 13 | |
---|
| 14 | if isa(a, 'quaternion') & isa(b, 'quaternion') |
---|
| 15 | |
---|
| 16 | if ispure(a) & ispure(b) |
---|
| 17 | r = x(a) == x(b) & y(a) == y(b) & z(a) == z(b); |
---|
| 18 | elseif ispure(a) |
---|
| 19 | % a is pure, but b isn't, so they can only be equal if the |
---|
| 20 | % scalar part of b is zero and the vector parts are equal. |
---|
| 21 | |
---|
| 22 | r = s(b) == 0 & v(a) == v(b); |
---|
| 23 | elseif ispure(b) |
---|
| 24 | % b is pure, but a isn't, so they can only be equal if the |
---|
| 25 | % scalar part of a is zero and the vector parts are equal. |
---|
| 26 | |
---|
| 27 | r = s(a) == 0 & v(a) == v(b); |
---|
| 28 | else |
---|
| 29 | r = s(a) == s(b) & v(a) == v(b); |
---|
| 30 | end |
---|
| 31 | |
---|
| 32 | else |
---|
| 33 | % One of the arguments is not a quaternion (the other must be, |
---|
| 34 | % otherwise Matlab would not call this function). |
---|
| 35 | |
---|
| 36 | if isa(a, 'quaternion') |
---|
| 37 | if ispure(a) |
---|
| 38 | % a has no scalar part, and b has no vector part, since it is not |
---|
| 39 | % a quaternion. The result can only be true if b is zero, and a |
---|
| 40 | % has zero vector part. |
---|
| 41 | |
---|
| 42 | r = b == 0 & a == quaternion(0, 0, 0); |
---|
| 43 | else |
---|
| 44 | % a is a full quaternion, so the result can be true only if a has |
---|
| 45 | % zero vector part, and b is equal to the scalar part of a. |
---|
| 46 | |
---|
| 47 | r = s(a) == b & v(a) == quaternion(0, 0, 0); |
---|
| 48 | end |
---|
| 49 | elseif isa(b, 'quaternion') |
---|
| 50 | r = b == a; % Swap the order and compare them using the code above. |
---|
| 51 | else |
---|
| 52 | error('Programming error: neither argument is a quaternion?'); |
---|
| 53 | end |
---|
| 54 | end |
---|