% Plots a 2D or 3D 1 s.d. frame.
% 2D: 'n-1' divisions polar-wise,
% 3D: 'n-1' divisions each azimuthally and polar-wise,
% for a Gaussian with covariance 'covar' and mean 'mu',
% 'colour' can be any integer.     M.Beal GMLC 26/03/99
%
% function plot_gaussian(covar,mu,col,n)

function [hh] = plot_gaussian(covar,mu,col,n)

if ~isempty(find(covar-covar == 0))

  if size(mu,1) < size(mu,2), mu = mu'; end

  if size(covar,1) == 3

    theta = (0:1:n-1)'/(n-1)*pi;
    phi = (0:1:n-1)/(n-1)*2*pi;
    
    sx = sin(theta)*cos(phi);
    sy = sin(theta)*sin(phi);
    sz = cos(theta)*ones(1,n);
    
    svect = [reshape(sx,1,n*n); reshape(sy,1,n*n); reshape(sz,1,n*n)];
    epoints = sqrtm(covar) * svect + mu*ones(1,n*n);
    
    ex = reshape(epoints(1,:),n,n);
    ey = reshape(epoints(2,:),n,n);
    ez = reshape(epoints(3,:),n,n);
    
    colourset = [1 0 0; 0 1 0; 0 0 1; 1 1 0; 1 0 1; 0 1 1];
    colour = colourset(mod(col-1,size(colourset,1))+1,:);      
    hh = mesh(ex,ey,ez, reshape(ones(n*n,1)*colour,n,n,3) );
    hidden off
    light

% for conversion to .eps figures, the 'mesh' command screws up the
% resolution. Therefore use these 4 lines insteasd of the previous 5.
%    colourset = ['r'; 'g'; 'b'; 'y'; 'm'; 'c']; 
%    colour = colourset(mod(col-1,size(colourset,1))+1,:);
%    plot3(epoints(1,:),epoints(2,:),epoints(3,:),colour)
%    plot3(reshape(ex',1,n*n),reshape(ey',1,n*n),reshape(ez',1,n*n),colour)
    
    
    
    
  else
    
    theta = (0:1:n-1)/(n-1)*2*pi;
    
    epoints = sqrtm(covar) * [cos(theta); sin(theta)] + mu*ones(1,n);
    
    colourset = ['r'; 'g'; 'b'; 'y'; 'm'; 'c']; 
    colour = colourset(mod(col-1,size(colourset,1))+1,:);
    
    hh = plot(epoints(1,:),epoints(2,:),colour,'LineWidth',3);
    hold on;
    plot(mu(1,:),mu(2,:),[colour '.'])
    
  end

else
  fprintf('\nVery ill covariance matrix - not plotting this one\n')
end










