0001
0002
0003
0004
0005
0006 function [A,rangx,rangy]=proj_grid(vec_X,vec_Y,vec_A,rgx_in,rgy_in,npxy_in)
0007 if length(vec_Y)<2
0008 warndlg_uvmat('less than 2 points in proj_grid.m','ERROR');
0009 return;
0010 end
0011 diffy=diff(vec_Y);
0012 index=find(diffy);
0013 if isempty(index); warndlg_uvmat('points aligned along abscissa in proj_grid.m','ERROR'); return; end;
0014 diff2=diff(diffy(index));
0015 if max(abs(diff2))>0.001*abs(diffy(index(1)))
0016
0017 if exist('rgx_in','var') & ~isempty (rgx_in) & isnumeric(rgx_in) & length(rgx_in)==2
0018 rangx=rgx_in;
0019 rangy=rgy_in;
0020
0021 dxy(1)=1/(npxy_in(1)-1);
0022 dxy(2)=1/(npxy_in(2)-1);
0023 dxy(1)=(rangy(2)-rangy(1))/(npxy_in(1)-1);
0024 dxy(2)=(rangx(2)-rangx(1))/(npxy_in(2)-1);
0025 else
0026 rangx(1)=min(vec_X);
0027 rangx(2)=max(vec_X);
0028 rangy(2)=min(vec_Y);
0029 rangy(1)=max(vec_Y);
0030 dxymod=sqrt((rangx(2)-rangx(1))*(rangy(1)-rangy(2))/length(vec_X));
0031 dxy=[-dxymod/4 dxymod/4];
0032 end
0033 xi=[rangx(1):dxy(2):rangx(2)];
0034 yi=[rangy(1):dxy(1):rangy(2)];
0035 [XI,YI]=meshgrid(xi,yi);
0036 A=griddata_uvmat(vec_X,vec_Y,vec_A,xi,yi');
0037 A=reshape(A,length(yi),length(xi));
0038 else
0039 x=vec_X(1:index(1));
0040 indexend=index(end);
0041 ymax=vec_Y(indexend+1);
0042 ymin=vec_Y(index(1));
0043
0044 y=vec_Y(index);
0045 y(length(y)+1)=ymax;
0046 nx=length(x);
0047 ny=length(y);
0048 B=(reshape(vec_A,nx,ny))';
0049 [X,Y]=meshgrid(x,y);
0050
0051
0052
0053 test_interp=1;
0054 if exist('rgx_in','var') & ~isempty (rgx_in) & isnumeric(rgx_in) & length(rgx_in)==2
0055 rangx=rgx_in;
0056 rangy=rgy_in;
0057 npxy=npxy_in;
0058 else
0059 rangx=[vec_X(1) vec_X(nx)];
0060
0061 rangy=[max(ymax,ymin) min(ymax,ymin)];
0062 if max(nx,ny) <= 64 & isequal(npxy_in,'np>256')
0063 npxy=[8*ny 8*nx];
0064 elseif max(nx,ny) <= 128 & isequal(npxy_in,'np>256')
0065 npxy=[4*ny 4*nx];
0066 elseif max(nx,ny) <= 256 & isequal(npxy_in,'np>256')
0067 npxy=[2*ny 2*nx];
0068 else
0069 npxy=[ny nx];
0070 test_interp=0;
0071 end
0072 end
0073 if test_interp==1
0074 xi=[rangx(1):(rangx(2)-rangx(1))/(npxy(2)-1):rangx(2)];
0075 yi=[rangy(1):(rangy(2)-rangy(1))/(npxy(1)-1):rangy(2)];
0076 [XI,YI]=meshgrid(xi,yi);
0077 A = interp2(X,Y,B,XI,YI);
0078 else
0079 A=B;
0080 XI=X;
0081 YI=Y;
0082 end
0083 end