📄 mfdrag.m
字号:
a = param(1); b = param(2); c = param(3);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(righthighH, 'xdata', curr_info(1,1)+real(square));
set(lefthighH, 'xdata', 2*c-curr_info(1,1)+real(square));
set(paramH, 'string', mat2str(param, 3));
elseif gco == lineH,
paramHndl = findobj(gcf, 'Tag', 'mfparams');
tmp = get(paramHndl, 'Userdata');
% tmp = str2mat(tmpstr);
% tmp = get(lineH, 'userdata');
param(3) = curr_info(1,1) - tmp(1) + tmp(4);
a = param(1); b = param(2); c = param(3);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', c-a+real(square));
set(rightlowH, 'xdata', c+a+real(square));
set(lefthighH, 'xdata', ...
c-a*(1/height-1)^(1/(2*b)) + real(square));
set(righthighH, 'xdata', ...
c+a*(1/height-1)^(1/(2*b)) + real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif strcmp(mf_type, 'smf'),
if get(leftlowH, 'userdata'),
if curr_info(1,1) <= param(2),
param(1) = curr_info(1,1);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', curr_info(1,1)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif get(righthighH, 'userdata'),
if curr_info(1,1) >= param(1),
param(2) = curr_info(1,1);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(righthighH, 'xdata', curr_info(1,1)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif gco == lineH,
paramHndl = findobj(gcf, 'Tag', 'mfparams');
tmp = get(paramHndl, 'Userdata');
% tmp = str2mat(tmpstr);
% tmp = get(lineH, 'userdata');
param = curr_info(1,1) - tmp(1) + tmp(2:3);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', param(1)+real(square));
set(righthighH, 'xdata', param(2)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif strcmp(mf_type, 'zmf'),
if get(lefthighH, 'userdata'),
if curr_info(1,1) <= param(2),
param(1) = curr_info(1,1);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(lefthighH, 'xdata', curr_info(1,1)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif get(rightlowH, 'userdata'),
if curr_info(1,1) >= param(1),
param(2) = curr_info(1,1);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(rightlowH, 'xdata', curr_info(1,1)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif gco == lineH,
paramHndl = findobj(gcf, 'Tag', 'mfparams');
tmp = get(paramHndl, 'Userdata');
% tmp = str2mat(tmpstr);
% tmp = get(lineH, 'userdata');
param = curr_info(1,1) - tmp(1) + tmp(2:3);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(lefthighH, 'xdata', param(1)+real(square));
set(rightlowH, 'xdata', param(2)+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif strcmp(mf_type, 'psigmf'),
height = 0.9;
if get(leftlowH, 'userdata'),
param(2) = curr_info(1,1);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', curr_info(1,1)+real(square));
set(lefthighH, 'xdata',c1-log(1/height-1)/a1+real(square));
set(paramH, 'string', mat2str(param, 3));
elseif get(rightlowH, 'userdata'),
param(4) = curr_info(1,1);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(rightlowH, 'xdata', curr_info(1,1)+real(square));
set(righthighH, 'xdata',c2-log(1/height-1)/a2+real(square));
set(paramH, 'string', mat2str(param, 3));
elseif get(lefthighH, 'userdata'),
%if curr_info(1,1) == param(2),
% param(1) = realmax;
%else
% param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
%end
if curr_info(1,1) > param(2),
param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
a = param(1); c = param(2);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(lefthighH, 'xdata', real(square)+curr_info(1,1));
set(paramH, 'string', mat2str(param, 3));
end
elseif get(righthighH, 'userdata'),
%if curr_info(1,1) == param(4),
% param(3) = realmax;
%else
% param(3) = -log(1/height-1)/(curr_info(1,1)-param(4));
%end
if curr_info(1,1) < param(4),
param(3) = -log(1/height-1)/(curr_info(1,1)-param(4));
a = param(3); c = param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(righthighH, 'xdata', real(square)+curr_info(1,1));
set(paramH, 'string', mat2str(param, 3));
end
elseif gco == lineH,
paramHndl = findobj(gcf, 'Tag', 'mfparams');
tmp = get(paramHndl, 'Userdata');
param(2) = curr_info(1,1) - tmp(1) + tmp(3);
param(4) = curr_info(1,1) - tmp(1) + tmp(5);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', c1+real(square));
set(rightlowH, 'xdata', c2+real(square));
set(lefthighH, 'xdata', ...
c1-log(1/height-1)/a1+real(square));
set(righthighH, 'xdata', ...
c2-log(1/height-1)/a2+real(square));
set(paramH, 'string', mat2str(param, 3));
end
elseif strcmp(mf_type, 'dsigmf'),
height = 0.9;
if get(leftlowH, 'userdata'),
param(2) = curr_info(1,1);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', curr_info(1,1)+real(square));
set(lefthighH, 'xdata',c1-log(1/height-1)/a1+real(square));
set(paramH, 'string', mat2str(param, 3));
elseif get(rightlowH, 'userdata'),
param(4) = curr_info(1,1);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(rightlowH, 'xdata', curr_info(1,1)+real(square));
set(righthighH, 'xdata',c2+log(1/height-1)/a2+real(square));
set(paramH, 'string', mat2str(param, 3));
elseif get(lefthighH, 'userdata'),
if curr_info(1,1) == param(2),
param(1) = realmax;
else
param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
end
a = param(1); c = param(2);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(lefthighH, 'xdata', real(square)+curr_info(1,1));
set(paramH, 'string', mat2str(param, 3));
elseif get(righthighH, 'userdata'),
if curr_info(1,1) == param(4),
param(3) = realmax;
else
param(3) = log(1/height-1)/(curr_info(1,1)-param(4));
end
a = param(3); c = param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(righthighH, 'xdata', real(square)+curr_info(1,1));
set(paramH, 'string', mat2str(param, 3));
elseif gco == lineH,
paramHndl = findobj(gcf, 'Tag', 'mfparams');
tmp = get(paramHndl, 'Userdata');
param(2) = curr_info(1,1) - tmp(1) + tmp(3);
param(4) = curr_info(1,1) - tmp(1) + tmp(5);
a1=param(1); c1=param(2); a2=param(3); c2=param(4);
set(lineH, 'ydata', evalmf(x, param, mf_type));
set(leftlowH, 'xdata', c1+real(square));
set(rightlowH, 'xdata', c2+real(square));
set(lefthighH, 'xdata', ...
c1-log(1/height-1)/a1+real(square));
set(righthighH, 'xdata', ...
c2+log(1/height-1)/a2+real(square));
set(paramH, 'string', mat2str(param, 3));
end
else
error('Unknown MF type!');
end
% y=evalmf(x, param, mf_type);
% centerIndex=find(y==max(y));
% centerIndex=round(mean(centerIndex));
% textHndl=findobj(gcf, 'Tag', 'mftext', 'Userdata', paramLine.CurrMF);
% set(textHndl, 'Position', [x(centerIndex), 1.1, 0]);
fis.(varType)(varIndex).mf(paramLine.CurrMF).params = param;
% update the most recent state.
oldfis{1} = fis;
set(gcf, 'Userdata', oldfis);
end
%---------------------------------------------------------
function localButtonUpFcn(eventSrc,eventData,storedfis)
% local function for mouse button up action
leftlowH = findobj(gcf, 'tag', 'leftlow');
lefthighH = findobj(gcf, 'tag', 'lefthigh');
centerH = findobj(gcf, 'tag', 'center');
righthighH = findobj(gcf, 'tag', 'righthigh');
rightlowH = findobj(gcf, 'tag', 'rightlow');
lineH = findobj(gcf, 'tag', 'mfline');
allH = [leftlowH lefthighH centerH righthighH rightlowH]; % lineH'];
set(allH, 'erasemode', 'normal', 'userdata', []);
oldfis = get(gcf, 'Userdata');
currentfis = oldfis{1};
if ~isequalwithequalnans(currentfis,storedfis) % REVISIT: isequalwithequalnans
oldfis{1} = storedfis;
set(gcf, 'Userdata',oldfis);
pushundo(gcf,currentfis);
updtfis(gcf,currentfis,[4 5 6]);
end
param=get(findobj(gcf, 'Tag', 'mainaxes'), 'Userdata');
textHndl=findobj(gcf, 'Tag', 'mftext', 'Userdata', param.CurrMF);
lineHndl=findobj(gcf, 'Tag', 'mfline', 'Userdata', param.CurrMF);
if ~isempty(lineHndl)
y=get(lineHndl, 'Ydata');
x=get(lineHndl, 'Xdata');
centerIndex=find(y==max(y));
centerIndex=round(mean(centerIndex));
set(textHndl, 'Position', [x(centerIndex), 1.1, 0]);
end
set(gcf,'WindowButtonMotionFcn','');
%--------------------------------------------------------------------------
function out = local_get_control_square
% create a perfect square
set(gca, 'unit', 'pixel');
axes_pos = get(gca, 'pos'); w = axes_pos(3); h = axes_pos(4);
out = 0.02*([-1 1 1 -1 -1]*h/w*...
(max(get(gca, 'xlim'))- min(get(gca, 'xlim')))/...
(max(get(gca, 'ylim'))- min(get(gca, 'ylim'))) +...
sqrt(-1)*[-1 -1 1 1 -1]);
set(gca, 'unit', 'normalize');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -