# v_rotqc2mc

## PURPOSE

V_ROTQC2MC converts a matrix of complex quaternion vectors to quaternion matrices

## SYNOPSIS

function mc=v_rotqc2mc(qc)

## DESCRIPTION

    V_ROTQC2MC converts a matrix of complex quaternion vectors to quaternion matrices
     Inputs:

         QC(2m,n,...)   array of complex quaternion vectors (each 2x1)

     Outputs:

         MC(2m,2n,...)   array of complex quaternion matrices (each 2x2)

     Each quarternion, r+ai+bj+ck is a 2x1 complex vector in the input array of the
     form [ r+bi ; a+ci ]. In the output array, this becomes a 2x2 complex matrix
     of the form [ r+bi -a+ci ; a+ci r-bi ].

     In matrix form, quaternions can be multiplied and added using normal matrix
     arithmetic. The complex matrix form has 4 complex elements while the real
     matrix form has 16 real elements.

## CROSS-REFERENCE INFORMATION

This function calls:

- v_rotqr2ro ROTQR2RO converts a real quaternion to a 3x3 rotation matrix

This function is called by:

## SOURCE CODE

    0001 function mc=v_rotqc2mc(qc)
    0002 %V_ROTQC2MC converts a matrix of complex quaternion vectors to quaternion matrices
    0003 % Inputs:
    0004 %
    0005 %     QC(2m,n,...)   array of complex quaternion vectors (each 2x1)
    0006 %
    0007 % Outputs:
    0008 %
    0009 %     MC(2m,2n,...)   array of complex quaternion matrices (each 2x2)
    0010 %
    0011 % Each quarternion, r+ai+bj+ck is a 2x1 complex vector in the input array of the
    0012 % form [ r+bi ; a+ci ]. In the output array, this becomes a 2x2 complex matrix
    0013 % of the form [ r+bi -a+ci ; a+ci r-bi ].
    0014 %
    0015 % In matrix form, quaternions can be multiplied and added using normal matrix
    0016 % arithmetic. The complex matrix form has 4 complex elements while the real
    0017 % matrix form has 16 real elements.
    0018
    0019 %
    0020 %      Copyright (C) Mike Brookes 2000-2018
    0021 %      Version: $Id: v_rotqc2mc.m 10865 2018-09-21 17:22:45Z dmb $
    0022 %
    0023 %   VOICEBOX is a MATLAB toolbox for speech processing.
    0024 %   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
    0025 %
    0026 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0027 %   This program is free software; you can redistribute it and/or modify
    0028 %   it under the terms of the GNU Lesser General Public License as published by
    0029 %   the Free Software Foundation; either version 3 of the License, or
    0030 %   (at your option) any later version.
    0031 %
    0032 %   This program is distributed in the hope that it will be useful,
    0033 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
    0034 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    0035 %   GNU Lesser General Public License for more details.
    0036 %
    0037 %   You can obtain a copy of the GNU Lesser General Public License from
    0038 %   https://www.gnu.org/licenses/ .
    0039 %
    0040 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0041 s=size(qc);
    0042 m=s(1);
    0043 qa=reshape(qc,m,[]);
    0044 n=2*size(qa,2);
    0045 mc=zeros(m,n);
    0046 ix=1:2:m;
    0047 jx=2:2:n;
    0048 mc(:,jx-1)=qa;
    0049 mc(ix,jx)=-conj(qa(ix+1,:));
    0050 mc(ix+1,jx)=conj(qa(ix,:));
    0051 s(2)=2*s(2);
    0052 mc=reshape(mc,s);
    0053 if ~nargout
    0054     v_rotqr2ro([real(qc(1)); real(qc(2)); imag(qc(1)); imag(qc(2))]); % plot a rotated cube
    0055 end