2

我加载一个数据文件并以八度音阶绘制它。但是在情节中,我想在情节上标记点的周期性出现。我使用 ginput() 函数进行标记。但是我看到的问题是,如果我标记了一个不应该标记的不同点,然后立即意识到我犯了错误,现在我想删除我最后一个标记的点,然后标记正确的点。我做不到。我发现有 MATLAB 函数 getpts() 可以执行相同的操作,但不存在八度版本的 getpts()。谁能帮帮我?示例:我要标记的序列是 1,2,3,4,5,6,7,8,9,10。但不小心我标记了 1,2,3,5 并意识到我做错了,然后按键盘上的删除按钮删除 5,然后我标记 4,然后标记 5。

4

1 回答 1

3

虽然 getpts 本身并没有实现,但生成一个通过 ginput 逐个获取输入并审查它们以获得所需行为的小函数是相当容易的。例如

X = []; Y = [];
while true
  [x, y, b] = ginput(1);
  if     b == 8    ,   X(end)=[];    Y(end)=[];    % backspace key pressed
  elseif isempty(b),   break;                      % enter key pressed
  else             ,   X(end+1)=x;   Y(end+1)=y;   % any other key
  end
  disp([X;Y]);   fprintf('\n');   fflush(1);   % Optional terminal output
end

这是一种非常灵活的方法,允许您根据需要修改和添加功能(例如,根据按下的特定键添加不同的标记、随心所欲地绘制等)。

于 2020-03-13T10:24:14.380 回答