0

基本的な x および y データをプロットする単純なクラスがあります。クラス内には、データ カーソル モードを有効にし、テキストをカスタマイズし、ポイントを収集して保存するメソッドがあります。一度に 2 つのポイントしか収集できないように、メソッドの動作を変更したいと思います。現在、データカーソルモードをオフにしてからオンにして使用しても、すべてのポイントが保存されます。私のクラスのコードは次のとおりです。

classdef CursorPoint


    properties
        Xdata
        Ydata
    end

    methods
        function me = CursorPoint(varargin)

            x_data = 0:.01:2*pi;
            y_data = cos(x_data);
            f= figure;
            plot(x_data,y_data);
            me.DCM(f);

        end

        function DCM(me,fig)
            dcm_obj = datacursormode(fig);

            set(dcm_obj,'UpdateFcn',@myupdatefcn)
            set(dcm_obj,'enable','on')
            myPoints=[];

            function txt = myupdatefcn(empt,event_obj)
                % Customizes text of data tips

                pos = get(event_obj,'Position');
                myPoints(end + 1,:) = pos;
                txt = {['Time: ',num2str(pos(1))],...
                    ['Amplitude: ',num2str(pos(2))]};

            end

        end

    end
end
4

1 に答える 1

1

変数をとmyPointsという 2 つの変数に変更していただけますか。メソッドが呼び出されるたびに、 の内容を に移動し、現在の位置を に格納します。myPointCurrentmyPointPreviousmyupdatefcnmyPointCurrentmyPointPreviousmyPointCurrent

新しい関数 (いくつかのエラー チェックを含む) は次のようになります。

function txt = myupdatefcn(empt,event_obj)
    % Customizes text of data tips
    myPointPrevious=myPointCurrent;

    pos = get(event_obj,'Position');
    myPointCurrent=pos;

    txt = {['Time: ',num2str(pos(1))],...
        ['Amplitude: ',num2str(pos(2))]};
end
于 2015-11-08T06:23:22.050 に答える