⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interp2dgui.m

📁 有趣的可视的数值方法 出自网站http://www.mathworks.com/moler
💻 M
字号:
function interp2dgui(arg1,arg2)%INTERPGUI  Behavior of periodic parametric curves.%   Demonstrates interpolation by both periodic and nonperiodic%   splines and shape preserving Hermite cubics.%   INTERPGUI with no arguments starts with five points in the plane.%   INTERPGUI(n) starts with n points in the plane.%   INTERPGUI(z) starts with a plot of imag(z) vs. real(z).%   INTERPGUI(x,y) starts with a plot of y vs. x.%   The interpolation points can be varied with the mouse.%%   See SPLINETX, PCHIPTX, PERSPLINE, PERPCHIP, INTERPGUI.if nargin == 0 | isnumeric(arg1)   % Interpret arguments   if nargin == 0      % interpgui with no arguments      arg1 = 5;   end   if length(arg1) == 1      % interpgui(n)      n = arg1;      t = (0:n-1)/(n-1)*2*pi;      if mod(n,2)==1         r = 2+1.5*mod(1:n,2);      else         r = cos(t+pi/4);      end      x = r.*cos(t);      y = r.*sin(t);   elseif nargin == 1      % interpgui(z)      x = real(arg1(:).');      y = imag(arg1(:).');   elseif length(arg1) == length(arg2)      % interpgui(x,y)      x = arg1(:)';      y = arg2(:)';   else      error('Two arguments must have same length')   end   arg1 = [];   if ~isequal(get(gcf,'name'),'Interp2dgui')      % Initialize figure         shg      clf reset      set(gcf,'doublebuffer','on', ...        'name','Interp2dgui', 'numbertitle','off', ...        'windowbuttondown',['interp2dgui(''move''); set(gcf,' ...           '''windowbuttonmotion'',''interp2dgui(''''move'''')'')'], ...        'windowbuttonup','set(gcf,''windowbuttonmotion'','''')');         % Controls         F = {'splinetx','perspline','pchiptx','perpchip'};      uicontrol('units','normal','pos',[.85 .13 .14 .18], ...         'style','frame','background','white')      pos = [.86 .26 .12 .04];      u = NaN*ones(4,length(t));      h = plot(x,y,'o',u,u,'-');      for k = 1:4         if ~exist(F{k},'file')            warning('Please provide %s.',F{k})            enable = 'off';         else            enable = 'on';         end         uicontrol('units','normal','pos',pos,'enable',enable, ...            'style','check','string',F{k},'value',0, ...            'background','white','foreground',get(h(k+1),'color'), ...            'callback','interp2dgui(''cb'')');        pos(2) = pos(2)-.04;      end      uicontrol('units','normal','pos',[.86 .01 .05,.05], ...         'style','push','string','<','fontweight','bold','callback', ...         'n = get(gca,''userdata''); interp2dgui(max(4,n-1))')       uicontrol('units','normal','pos',[.93 .01 .05,.05], ...         'style','push','string','>','fontweight','bold','callback', ...         'n = get(gca,''userdata''); interp2dgui(n+1)')    end   % Initialize plots   n = length(x);   s = 1:n;   t = 1:1/32:n;   u = NaN*ones(4,length(t));   h = plot(x,y,'o',u,u,'-');   axis square;   ax = axis;   d = 0.2*diff(ax);   axis(ax-[d(1) -d(1) d(3) -d(3)]);   title('2D Interpolation')   set(gca,'userdata',n);   endh = flipud(get(gca,'children'));x = get(h(1),'xdata');y = get(h(1),'ydata');n = length(x);s = 1:n;t = 1:1/32:n;if isequal(arg1,'move')   % Respond to mouse motion   z = get(gca,'currentpoint');   z = z(1,:);   h = flipud(get(gca,'children'));   e = abs(x-z(1))+abs(y-z(2));   k = min(find(e == min(e)));   x(k) = z(1);   y(k) = z(2);   if k == 1, x(n) = x(1); y(n) = y(1); end   if k == n, x(1) = x(n); y(1) = y(n); endendax = axis;set(h(1),'xdata',x,'ydata',y)set(h(2),'xdata',splinetx(s,x,t),'ydata',splinetx(s,y,t));if exist('perspline','file')   set(h(3),'xdata',perspline(s,x,t),'ydata',perspline(s,y,t));endset(h(4),'xdata',pchiptx(s,x,t),'ydata',pchiptx(s,y,t));if exist('perpchip','file')   set(h(5),'xdata',perpchip(s,x,t),'ydata',perpchip(s,y,t));endaxis(ax);% Visibilityb = flipud(get(gcf,'children'));onf = {'off','on'};for k = 1:4   % Interpolants   set(h(k+1),'visible',onf{get(b(k+2),'value')+1})end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -