精華區beta MATLAB 關於我們 聯絡資訊
※ 引述《dragonace ()》之銘言: : 書上看到的一個例子: : function mouse01(action) 這裡表示這個函數的名字是mouse01 使用函數必須同時給定一個"action"(字串)輸入 : % mouse01: 本例展示如何設定滑鼠事件的反應指令 : if nargin==0, action='start'; end 這行程式的意思是 當你程式呼叫 mouse01 且沒有給定任何輸入字串時 [[[程式碼為 mouse01 ]]] 函數必須輸入的action字串令他等於"start" 因為action='start' 所以在下面的switch裡 函數會先執行case 'start' 裡的程式內容 : switch(action) : case 'start' % 開啟圖形視窗 : axis([0 1 0 1]); % 設定圖軸範圍 : box on; % 將圖軸加上圖框 : title('Click and drag your mouse in this window!'); : % 設定滑鼠按鈕被按下時的反應指令為「mouse01 down」 : set(gcf, 'WindowButtonDownFcn', 'mouse01 down'); ^^^^^^^^^^^^^^^^^ 這行的意思如同%裡說明的 : 如果在目前視窗有滑鼠按鍵被按下時執行mouse01 down這個程式 mouse01是函數名 down是mouse01這個函數執行時必須給定的輸入字串 發現沒 mouse01不就是目前自己這個函數嗎 所以他是自己呼叫自己 因為要執行mouse01 輸入字串是down 也就是說 action='down' 所以要執行switch的case 'down' 也就是正下方的那些內容 : case 'down' % 滑鼠按鈕被按下時的反應指令 : % 設定滑鼠移動時的反應指令為「mouse01 move」 : set(gcf, 'WindowButtonMotionFcn', 'mouse01 move'); : % 設定滑鼠按鈕被釋放時的反應指令為「mouse01 up」 : set(gcf, 'WindowButtonUpFcn', 'mouse01 up'); : % 列印「Mouse down!」訊息 : fprintf('Mouse down!\n'); : case 'move' % 滑鼠移動時的反應指令 : currPt = get(gca, 'CurrentPoint'); : x = currPt(1,1); : y = currPt(1,2); : line(x, y, 'marker', '.', 'EraseMode', 'xor'); : % 列印「Mouse is moving!」訊息及滑鼠現在位置 : fprintf('Mouse is moving! Current location = (%g, %g)\n', ... : currPt(1,1), currPt(1,2)); : case 'up' % 滑鼠按鈕被釋放時的反應指令 : % 清除滑鼠移動時的反應指令 : set(gcf, 'WindowButtonMotionFcn', ''); : % 清除滑鼠按鈕被釋放時的反應指令 : set(gcf, 'WindowButtonUpFcn', ''); : % 列印「Mouse up!」訊息 : fprintf('Mouse up!\n'); : end : 第一個問題是set(gcf, 'WindowButtonDownFcn', 'mouse01 down'); : 滑鼠被按下的指令不是存在'mouse01 down'這個字串嗎? 同上解說 滑鼠按下後要執行的函數不是存在'mouse01 down'這個字串 'mouse01 down'這個不是字串的意思 ' '範圍裡的是要執行的function 'move''down''down'這些都是對mouse01來說所要輸入的字串參數 : 可是接下來的case的事件都是'move''down''down'這些 : 所以set後面的第三個參數中 前面必須是這個function名稱 後面才是存的指令嗎?? 順便說明 set(gcf, 'WindowButtonMotionFcn', ''); ^^^^^^ 這裡什麼都沒有 也就是說什麼函數都不要執行 等於是說不要有任何動作 就是%裡清除動作的意思了~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.183.43
dragonace:酷!感謝!! 07/21 23:04