MATLAB 2010a に GUI を実装して、ユーザーがインタラクティブに区分線形関数を入力できるようにしたいと考えています(クリックでポイントを追加/削除し、ドラッグ アンド ドロップでポイントを移動します)。以下は C# での実装です。
マウスイベントをキャプチャして区分関数を更新する軸またはその他のオブジェクトを使用するMATLABに同様の実装があることを願っています。以下は、区分線形関数としてのユーザー入力の例です。
以下の関数をaddPoint.mという名前のパス上の m ファイルに保存し、コマンド ラインで次のように入力します。
>> hFigure = フィギュア; >> hAxes = 軸('親', 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);
最初のクリック後に軸の制限が自動的に更新されないようにすることで、これを改善できます。