Как получить кусочно-линейную функцию в MATLAB GUI - PullRequest
1 голос
/ 28 марта 2011

Я хочу реализовать графический интерфейс пользователя в MATLAB 2010a, чтобы пользователь мог интерактивно вводить Кусочно-линейную функцию (добавлять / удалять точки щелчком и перемещать точки путем перетаскивания). Здесь - это реализация на C #.

Я надеюсь, что в MATLAB есть аналогичная реализация, которая использует оси или любой другой объект, который захватывает события мыши и обновляет кусочную функцию. Ниже приведены некоторые примеры пользовательского ввода в виде кусочно-линейной функции:

enter image description here enter image description here enter image description here enter image description here

1 Ответ

1 голос
/ 29 марта 2011

Сохраните указанную ниже функцию в m-файле на вашем пути с именем addPoint.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);

Это можно улучшить, запретив автоматическое обновление границ осей после первого щелчка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...