1

我想在 MATLAB 2010a 中实现一个 GUI,用户能够以交互方式输入分段线性函数(通过单击添加/删除点并通过拖放移动点)。是 C# 中的一个实现。

我希望 MATLAB 中有一个类似的实现,它使用轴或任何其他对象来捕获鼠标事件并更新分段函数。以下是用户输入作为分段线性函数的一些示例:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

1 回答 1

1

将下面的函数保存到名为addPoint.m的路径上的 m 文件中,然后在命令行中输入以下内容:

>> hFigure = 图;
>> hAxes = axes('父', hFigure);
>> set(hAxes, 'ButtonDownFcn', @addPoint);

这将创建一个轴,每次单击轴时都会执行addPoint 。addPoint如果不存在线,则创建一条线,获取单击点的坐标并将这些坐标添加到线的XDataYData属性中。

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);

您可以通过防止轴限制在第一次单击后自动更新来改进这一点。

于 2011-03-29T06:52:59.800 回答