📄 nnd17pc.m
字号:
% Respond to mouse down.
%
% ME('down')
%==================================================================
elseif strcmp(cmd,'down') & (fig) & (nargin == 1)
%handled = 0;
for i=1:9
if any([3 6] == i)
maxval = 2;
elseif any([1 4 8 9] == i)
maxval = 4;
elseif any([2 5 7] == i)
maxval = 1;
else
maxval = 4;
end
pt = get(meters(i),'currentpoint');
x = pt(1);
y = pt(3);
if (abs(x) <= maxval*1.3) & (y >= -0.3 & y <= 1.3)
handled = 1;
% SET UP MOTION TRACKING IN METER
set(fig,'WindowButtonMotionFcn',[me '(''m_motion'',' num2str(i) ')']);
set(fig,'WindowButtonUpFcn',[me '(''m_up'',' num2str(i) ')']);
feval(me,'m_motion',i);
end
end
%if (~handled)
% pt = get(func_axis,'currentpoint');
% x = pt(1);
% y = pt(3);
% ylim = get(func_axis,'ylim');
% if (abs(x) <= p_max) & (y >= ylim(1) & y <= ylim(2))
% SET UP MOTION TRACKING FOR FUNCTION
% set(fig,'WindowButtonMotionFcn',[me '(''f_motion'')']);
% set(fig,'WindowButtonUpFcn',[me '(''f_up'')']);
% feval(me,'f_motion',i);
% end
%end
%==================================================================
% Respond to motion in meter.
%
% ME('m_motion',meter_index)
%==================================================================
elseif strcmp(cmd,'m_motion') & (fig)
if any([3 6] == arg1)
maxval = 2;
elseif any([1 4 8 9] == arg1)
maxval = 4;
elseif any([2 5 7] == arg1)
maxval = 1;
else
maxval = 4;
end
% GET CURRENT POINT
pt = get(meters(arg1),'currentpoint');
x = pt(1);
x = round(x*10/maxval)*maxval/10;
x = max(-maxval,min(maxval,x));
% GET DATA
mdgray = nnmdgray;
values = get(values_ptr,'userdata');
% MOVE INDICATOR
if any([8 9] == arg1)
xdata = [0.2 -0.2 0]*maxval+x;
else
xdata = [0 0.2 -0.2]*maxval+x;
end
set(indicators(arg1),'facecolor',mdgray,'edgecolor',mdgray);
set(indicators(arg1),'facecolor',nnwhite,'edgecolor',nndkblue,'xdata',xdata);
% STORE DATA
values(arg1) = x;
set(values_ptr,'userdata',values);
%==================================================================
% Respond to mouse up in meter.
%
% ME('m_up',meter_index)
%==================================================================
elseif strcmp(cmd,'m_up') & (fig)
% DISABLE TRACKING
set(fig,'WindowButtonMotionFcn','');
set(fig,'WindowButtonMotionFcn','');
% RESET INDICATOR COLORS
set(indicators(arg1),'facecolor',nnred,'edgecolor',nndkblue);
% UPDATE FUNCTION
cmd = 'update';
%==================================================================
% Respond to motion in function.
%
% ME('f_motion')
%==================================================================
%elseif strcmp(cmd,'f_motion') & (fig)
% GET CURRENT POINT
% pt = get(func_axis,'currentpoint');
% x = pt(1);
% x = max(-p_max,min(p_max,x));
% GET DATA
% mdgray = nnmdgray;
% values = get(values_ptr,'userdata');
% W1 = [values([1 4])' values([8 9])'];
% b1 = values([2 5])';
% W2 = values([3 6]);
% b2 = values(7);
% ltyell = nnltyell;
% NEW INPUT & OUTPUT
% p = x;
% a = W2(1)*exp(-((p-W1(1)).*b1(1)).^2) + W2(2)*exp(-((p-W1(2)).*b1(2)).^2) + b2;
% STORE DATA
% values(10) = p;
% values(11) = a;
% set(values_ptr,'userdata',values);
%==================================================================
% Respond to mouse up in function.
%
% ME('f_up')
%==================================================================
%elseif strcmp(cmd,'f_up') & (fig)
% DISABLE TRACKING
% set(fig,'WindowButtonMotionFcn','');
% set(fig,'WindowButtonMotionFcn','');
% RESET P-LINE COLOR
% red = nnred;
% ltyell = nnltyell;
%==================================================================
% Set parameters.
%
% ME('set',W1,b1,W2,b2,f2)
%==================================================================
elseif strcmp(cmd,'set') & (fig) & (nargin == 6)
% CHECK SIZES
if all(size(arg1) == [2 1]) & ...
all(size(arg2) == [2 1]) & ...
all(size(arg3) == [1 2]) & ...
all(size(arg4) == [1 1])
% GET VALUES
values = get(values_ptr,'userdata');
p = values(10);
% ALTER VALUES
W1 = min(w_max,max(-w_max,arg1));
b1 = min(w_max,max(-w_max,arg2));
W2 = min(w_max,max(-w_max,arg3));
b2 = min(w_max,max(-w_max,arg4));
[R,Q] = size(p);
a = W2(1)*exp(-((p-W1(1)).*b1(1)).^2) + W2(2)*exp(-((p-W1(2)).*b1(2)).^2) + b2*ones(1,Q);
values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) p a];
% SAVE VALUES
set(values_ptr,'userdata',values);
% MOVE METERS
cmd = 'move';
end
%==================================================================
% Randomize parameters.
%
% ME('random')
%==================================================================
elseif strcmp(cmd,'random') & (fig)
% GET VALUES
values = get(values_ptr,'userdata');
p = values(10);
% ALTER VALUES
W1 = (rand(2,2)*8-4)*1;
b1 = (rand(2,1)*2-1)*1;
W2 = (rand(1,2)*4-2)*1;
b2 = (rand(1,1)*2-1)*1;
[R,Q] = size(p);
xp=-p_max:p_max/div:p_max;
yp=xp;
num = length(xp);
[X,Y] = meshgrid(xp,yp);
xx=X(:);
yy=Y(:);
Q=length(yy);
A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
+ W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
Am = reshape(A,num,num);
trigger=0;
v = [trigger trigger];
a_max = max(A);
a_min = min(A);
a_edge = (a_max-a_min)*0.1;
values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) xp A'];
% SAVE VALUES
set(values_ptr,'userdata',values);
% MOVE METERS
cmd = 'move';
%==================================================================
% Re-initialize parameters.
%
% ME('reset')
%==================================================================
elseif strcmp(cmd,'reset') & (fig)
% GET VALUES
values = get(values_ptr,'userdata');
p = values(10);
% CONSTANTS
W1 = [1 -1;-1 1];
b1 = [1;1];
W2 = [2 2];
b2 = [-1];
[R,Q] = size(p);
xp=-p_max:p_max/div:p_max;
yp=xp;
num = length(xp);
[X,Y] = meshgrid(xp,yp);
xx=X(:);
yy=Y(:);
Q=length(yy);
A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
+ W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
Am = reshape(A,num,num);
trigger=0;
v = [trigger trigger];
a_max = max(A);
a_min = min(A);
a_edge = (a_max-a_min)*0.1;
values = [W1(1,1) b1(1) W2(1) W1(2,1) b1(2) W2(2) b2 W1(1,2) W1(2,2) xp A'];
% SAVE VALUES
set(values_ptr,'userdata',values);
% MOVE METERS
cmd = 'move';
%==================================================================
% Get parameters.
%
% [W1,b1,W2,b2,f2] = ME('get')
%==================================================================
elseif strcmp(cmd,'get') & (fig)
% GET DATA
values = get(values_ptr,'userdata');
ret1 = [values([1 4])' values([8 9])'];
ret2 = values([2 5])';
ret3 = values([3 6]);
ret4 = values(7);
end
%==================================================================
% Move meters.
%
% ME('move')
%==================================================================
if strcmp(cmd,'move') & (fig)
% GET DATA
values = get(values_ptr,'userdata');
% PICK PROPER ICON
axes(fig_axis);
% HILIGHT METERS
mdgray = nnmdgray;
red = nnred;
white = nnwhite;
dkblue = nndkblue;
for i=1:9
set(indicators(i),'facecolor',white);
end
nnpause(0.25)
% MOVE METERS
for i=1:9
if any([3 6] == i)
maxval = 2;
elseif any([1 4 8 9] == i)
maxval = 4;
elseif any([2 5 7] == i)
maxval = 1;
else
maxval = 4;
end
if any([8 9] == i)
xx = [0.2 -0.2 0]*maxval+values(i);
else
xx = [0 0.2 -0.2]*maxval+values(i);
end
set(indicators(i),'facecolor',mdgray,'edgecolor',mdgray);
set(indicators(i),'facecolor',white,'edgecolor',dkblue,'xdata',xx);
end
nnpause(0.25)
% UNHILIGHT METERS
for i=1:9
set(indicators(i),'facecolor',red);
end
% ALWAYS DO AN UPDATE AFTERWARDS
cmd = 'update';
end
%==================================================================
% Update function.
%
% ME('update')
%==================================================================
if strcmp(cmd,'update') & (fig)
% GET DATA
%tf = get(tf_ptr,'userdata');
values = get(values_ptr,'userdata');
W1 = [values([1 4])' values([8 9])'];
b1 = values([2 5])';
W2 = values([3 6]);
b2 = values(7);
xp = values(10);
ltyell = nnltyell;
red = nnred;
% NEW FUNCTION
xp=-p_max:p_max/div:p_max;
yp=xp;
num = length(xp);
[X,Y] = meshgrid(xp,yp);
xx=X(:);
yy=Y(:);
Q=length(yy);
A = W2(1)*exp(-((xx-W1(1,1)).*b1(1)).^2-((yy-W1(1,2)).*b1(1)).^2) ...
+ W2(2)*exp(-((xx-W1(2,1)).*b1(2)).^2-((yy-W1(2,2)).*b1(2)).^2) + b2*ones(Q,1);
A = reshape(A,num,num);
trigger=0;
v = [trigger trigger];
a_max = max(A);
a_min = min(A);
a_edge = (a_max-a_min)*0.1;
% REDRAW LINES
set(func_line,'color',nndkblue,'xdata',xp,'ydata',yp,'zdata',A)
set(func_line2,'xdata',xp,'ydata',yp,'zdata',A)
% STORE DATA
set(values_ptr,'userdata',values);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -