0

私はこのリンクから物事を実装しようとしています-

http://blogs.mathworks.com/pick/2008/05/27/advanced-matlab-capture-mouse-movement/

もう少し複雑なGUIで..曲線をプロットし、ピークファインダー関数を使用してプロット内のすべての最大値を見つけ、Xでマークします(別のプロット関数を使用)が、ユーザーに能力を持たせたい最大値が間違っている場合はその位置を修正し、不要な場合は一部の X を消去します。

各ステップで特定の X のみをドラッグできるようにするには、何を変更または追加すればよいかわかりません。

このコードではGUIではありませんが、まだ同じ問題があります

私のコード-

function main

global data_file

x=0:0.1:100
data_file=sin(x)*5+(rand(100*10+1,1)’-0.5)

starting_sample= 1;
sampling_rate=1;

len = length(data_file);

f = figure('NumberTitle','off','color','w','Menubar','none');

[picks1,locs1] = findpeaks(data_file(starting_sample:sampling_rate:len),'MINPEAKDISTANCE',10);
a = axes('xlim',[0 100], 'ylim',[-5 5]);

plot( 1:sampling_rate:len, data_file( starting_sample:sampling_rate:len ) );
hold on
p=plot(locs1,picks1,'x','linewidth',2,'color','r','ButtonDownFcn',@start_drag1);
hold off

set(f,'WindowButtonUpFcn',@stop_drag1)

    function start_drag1(varargin)
        set(f,'WindowButtonMotionFcn',@draging)
    end

    function draging(varargin)
        pt= get(a,'currentpoint')
        set(p,'XData',pt(1)*[1 1])
    end

    function stop_drag1(varargin)
        set(f,'WindowButtonMotionFcn','')
    end
end
4

1 に答える 1

0

ドラッグできる最小/最大ステップ サイズを指定する場合は、関数を編集して、ドラッグのしきい値を超えた後dragingに段階的に更新する必要があります。XData

このようなものがうまくいくかもしれません

function draging(varargin)

   dragDist = 1;
   pt = get(a,'currentpoint')
   curX = get(p,'XData')

   if ( curX(1) - pt(1) > dragDist) %drag to the left
      set(p,'XData',curX - dragDist)
   elseif (pt(1) - curX(1) > dragDist) % drag to the right
      set(p, 'XData', curX + dragDist)
   end

end
于 2012-11-07T19:34:08.773 に答える