function p2 = resample(p,Np,ksType)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% resample(p,Np,KSType) -- construct a new estimate of the KDE p by sampling
%                      Np new points; determines a bandwidth by ksize(pNew,KSType)
%                      NOTE: KStype = 'discrete' resamples points by weight &
%                            preserves original kernel size
% see also: kde, ksize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Copyright (C) 2003 Alexander Ihler; distributable under GPL -- see README.txt

  if (nargin < 3) ksType = 'rot'; end;
  if (nargin < 2) Np = getNpts(p); end;
  if (strcmp(ksType,'discrete'))
    q = kde(getPoints(p),zeros(getDim(p),1),getWeights(p)); 
    [samplePts,ind] = sample(q,Np);
    if (size(p.bandwidth,2)>2*p.N), ks = getBW(p,ind);
    else ks = getBW(p,1); end;
    p2 = kde(samplePts,ks);
  else
    samplePts = sample(p,Np);
    p2 = kde(samplePts,ksType);
  end;