function phas = phasor(varargin)
% phasor Constructor function for phasor object
% phas = phasor(magnitude,angle) or phasor([magnitude angle])
% version 3
switch nargin
case 0
% if no input arguments, create a default object
phas.mag=0;
phas.angle=0;
phas = class(phas,'phasor');
case 1
% if single argument of class phasor, return it
%if single arguement of numeric class and is a vector
%cast as phasor p=phasor([x y])
if (isa(varargin{1},'phasor'))
phas = varargin{1};
elseif(isa(varargin{1},'numeric'))
[rows,cols]=size(varargin{1});
if (cols==2)
if (rows==1)
phas.mag=varargin{1}(1,1);
phas.angle=varargin{1}(1,2);
if phas.mag==0
phas.angle=0;
end
phas=class(phas,'phasor');
else %creates phasor array
for k=1:rows
phas(k).mag=varargin{1}(k,1);
phas(k).angle=varargin{1}(k,2);
if phas(k).mag == 0
phas(k).angle =0;
end
end
phas=class(phas,'phasor');
phas=phas';
end
else
error('Wrong argument type')
end
else
error('Wrong argument type')
end
case 2
if (ndims(varargin{1})>2 || ndims(varargin{2})>2)
error('Phasor constructor only supporsts 2D arrays')
end
[rows1,cols1]=size(varargin{1});
[rows2,cols2]=size(varargin{2});
if (isa(varargin{1},'numeric') && isa(varargin{2},'numeric'))
if (numel(varargin{1})==1 && numel(varargin{2})==1)
% 2 create object using specified values
phas.mag = varargin{1};
phas.angle = varargin{2};
if phas.mag==0
phas.angle=0;
end
phas = class(phas,'phasor');
elseif isequal(size(varargin{1}),size(varargin{2})) && cols1==1
%two column arrays with the same length
for k=1:length(varargin{1})
phas(k).mag=varargin{1}(k);
phas(k).angle=varargin{2}(k);
if phas(k).mag==0
phas(k).angle=0;
end
end
phas=class(phas,'phasor');
phas=phas';
elseif isequal(size(varargin{1}),size(varargin{2})) && cols1~=1
%two 2D arrays are passed in
for k=1:rows1
for m=1:cols1
phas(k,m).mag=varargin{1}(k,m);
phas(k,m).angle=varargin{2}(k,m);
if phas(k,m).mag==0
phas(k,m).angle=0;
end
end
end
phas=class(phas,'phasor');
elseif ~isequal(size(varargin{1}),size(varargin{2}))
error('Input values must be same size')
else
error('Input format not supported');
end
else
error('Input format not supported');
end
otherwise
error('Wrong number of input arguments')
end