【MATLAB】커서를 쫓는 플롯을 만드는 방법

8243 단어 콜백 함수matlab

소개



어느 로고에 대해서 눈이 가볍게 움직이도록 가공된 이미지도 조금 전에 유행했습니다만, 거기에 관련해 만든 코드를 여기에서 공양해 둡니다.



관련 기사



콜백 함수를 사용한 예로는 다음 기사도 있으므로 꼭 참조하십시오.

  • MATLAB에서 그림 그리기 도구를 만들어 보았다 (마우스 조작 이벤트에 따른 프로그램 예) by @sanmojih

  • MATLAB으로 게임 만들기 ~1. 콜백편~ by @macht

  • 【MATLAB/AppDesigner】파형을 마우스 드래그로 범위 선택 by @ Dokagui_Titaran

  • 특히 @macht씨의 기사는 콜백 함수 자체의 설명도 정중하게 정리되어 있으므로 추천.

    환경


  • MATLAB R2020a

  • 콜백 함수



    Figure에는 마우스 조작에 관한 콜백 함수가 3개 있습니다.


    콜백 함수
    개요


    WindowButtonDownFcn
    마우스를 클릭할 때 호출되는 콜백 함수

    WindowButtonMotionFcn
    마우스를 움직일 때 호출되는 콜백 함수

    WindowButtonUpFcn
    마우스를 놓을 때 호출되는 콜백 함수


    여기에서는 커서의 이동을 쫓는 것 뿐이므로 WindowButtonMotionFcn 를 사용합니다.
    % コールバック関数を設定
    figure('WindowButtonMotionFcn',@myFcn);
    

    이것으로 커서 위치가 이동중은 myFcn (아래에서 정의)가 불려 가게 됩니다.

    원 그리기



    여기는 바삭바삭하고 음함수로 묘화. fimplicit 함수( 1 )를 사용합니다.
    fimplicit(@(x,y) x.^2+y.^2-1,[-2,2,-2,2])
    

    커서 위치 획득



    이것은 axes 객체의 CurrentPoint 로 취할 수 있습니다.
    % カーソルの位置取得
    cp = ah.CurrentPoint;
    

    mouseMotionExample.m



    이상을 정리하면 · · 이하와 같습니다. 놀아보세요.

    mouseMotionExample.m
    
    function mouseMotionExample
        % コールバック関数を設定
        figure('WindowButtonMotionFcn',@myFcn);
    
        % 円を描画
        ah = axes;
        fimplicit(ah, @(x,y) x.^2+y.^2-1,[-2,2,-2,2])
        axis equal
        hold on
    
        % 動かす対象の点を作成
        ph = plot(nan,nan,'MarkerSize',10,...
            'Marker','o','MarkerFaceColor','k');
        hold off
    
        function myFcn(src,callbackdata)
            % カーソルの位置取得
            cp = ah.CurrentPoint;
            xMouse = cp(1,1); % x 座標
            yMouse = cp(1,2); % y 座標
    
            % 円の中心とカーソル位置を結んだ線分上で
            % 中心からの距離が 0.8 のところに点を移動
            r0 = 0.8;
            r = sqrt(xMouse.^2 + yMouse.^2);
            ph.XData = xMouse/r*r0;
            ph.YData = yMouse/r*r0;
        end
    end
    
    



    도움말 페이지 에서 인용  MATLAB에서 그림 그리기 도구를 만들어 보았다 (마우스 조작 이벤트에 따른 프로그램 예)

    좋은 웹페이지 즐겨찾기