我想在MATLAB 2010a中实现一个GUI,用户可以交互式地输入Piecewise linear function(通过点击添加/删除点并通过拖放移动点)。 Here是C#中的一个实现。
我希望在MATLAB中有一个类似的实现,它使用轴或任何其他捕获鼠标事件并更新分段函数的对象。以下是用户输入作为分段线性函数的一些示例:
答案 0 :(得分:1)
将下面的函数保存到名为 addPoint.m 的路径上的m文件中,并在命令行中输入以下内容:
>> hFigure = figure; >> hAxes = axes('Parent', hFigure); >> set(hAxes, 'ButtonDownFcn', @addPoint);
这会创建一个轴,每次单击轴时都会执行 addPoint 。如果不存在任何行, addPoint 会创建一条线,获取所点击点的坐标,并将这些坐标添加到该行的XData
和YData
属性中。
function addPoint(hObject, eventdata)
% Get the clicked point.
currentPoint = get(hObject, 'CurrentPoint');
% Get the handle to the plotted line. Create a line if one doesn't exist
% yet.
hLine = get(hObject, 'Children');
if isempty(hLine)
hLine = line(0, 0, ...
'Parent', hObject, ...
'Marker', 's', ...
'MarkerEdgeColor', 'r');
end
% Temporarily set the axes units to normalized.
axesUnits = get(hObject, 'Units');
set(hObject, 'Units', 'normalized');
% Get the clicked point and add it to the plotted line.
data(:,1) = get(hLine, 'XData');
data(:,2) = get(hLine, 'YData');
data(end+1,:) = [currentPoint(1,1) currentPoint(1,2)];
data = sortrows(data, 1);
set(hLine, 'XData', data(:,1), 'YData', data(:,2));
% Reset the axes units.
set(hObject, 'Units', axesUnits);
您可以通过阻止第一次点击后自动更新轴限制来改善这一点。