西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識(shí) → Matlab實(shí)現(xiàn)鼠標(biāo)寫字代碼

Matlab實(shí)現(xiàn)鼠標(biāo)寫字代碼

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:本站整理時(shí)間:2010/12/28 0:57:54字體大。A-A+

作者:佚名點(diǎn)擊:708次評(píng)論:0次標(biāo)簽: Matlab 矩陣

  • 類型:編程工具大小:1.5M語言:中文 評(píng)分:1.2
  • 標(biāo)簽:
立即下載

最早的程序,實(shí)在忘了從哪里下載的了。能夠?qū)崿F(xiàn)鼠標(biāo)的手寫輸入,但是一些不連續(xù)的點(diǎn)。

tmouse.m
function tmouse(action)
% TMOUSE 本例展示如何以Handle Graphics來設(shè)定滑鼠事件(Mouse
% Events)的反應(yīng)指令(Callbacks)
if nargin == 0
    action = 'start';
end
switch(action)
  % 開啟圖形視窗
  case 'start',
   axis([0 1 0 1]);% 設(shè)定圖軸范圍
   box on;% 將圖軸加上圖框
   title('Click and drag your mouse in this window!');
   % 設(shè)定滑鼠按鈕被按下時(shí)的反應(yīng)指令為「tmouse down」
   set(gcf, 'WindowButtonDownFcn', 'tmouse down');

  % 滑鼠按鈕被按下時(shí)的反應(yīng)指令
  case 'down',
   % 設(shè)定滑鼠移動(dòng)時(shí)的反應(yīng)指令為「tmouse move」
   set(gcf, 'WindowButtonMotionFcn', 'tmouse move');
   % 設(shè)定滑鼠按鈕被釋放時(shí)的反應(yīng)指令為「tmouse up」
   set(gcf, 'WindowButtonUpFcn', 'tmouse up');
   % 列印「Mouse down!」訊息
   fprintf('Mouse down!\n');
  % 滑鼠移動(dòng)時(shí)的反應(yīng)指令
  case 'move',
   currPt = get(gca, 'CurrentPoint');
   x = currPt(1,1);
   y = currPt(1,2);
   line(x, y, 'marker', '.', 'EraseMode', 'xor');
   % 列印「Mouse is moving!」訊息及滑鼠現(xiàn)在位置
   fprintf('Mouse is moving! Current location = (%g, %g)\n', currPt(1,1), currPt(1,2));
  % 滑鼠按鈕被釋放時(shí)的反應(yīng)指令
  case 'up',
   % 清除滑鼠移動(dòng)時(shí)的反應(yīng)指令
   set(gcf, 'WindowButtonMotionFcn', '');
   % 清除滑鼠按鈕被釋放時(shí)的反應(yīng)指令
   set(gcf, 'WindowButtonUpFcn', '');
   % 列印「Mouse up!」訊息
   fprintf('Mouse up!\n');
end
end
 

本人在Matlab 2010a上運(yùn)行過該程序tmouse.m,運(yùn)行結(jié)果截圖如下:

  

 之后有人在此基礎(chǔ)上,把畫點(diǎn)改成了連續(xù)的線段。

本人覺得程序還有點(diǎn)小問題,在此不再轉(zhuǎn)載。

下面是本人改進(jìn)的程序,能夠?qū)崿F(xiàn)點(diǎn)擊左鍵輸入,右鍵顯示輸入的記錄結(jié)果。

MouseDraw.m
function  MouseDraw(action)
% MouseDraw 本例展示如何以Handle Graphics來設(shè)定滑鼠事件
% (MouseDraw Events)的反應(yīng)指令(Callbacks)

% 本程序在鼠標(biāo)移動(dòng)非?鞎r(shí),不會(huì)造成畫“斷線”
% global不能傳矩陣
global InitialX InitialY FigHandle
imSize = 200;
if nargin == 0, action = 'start';   end

switch(action)
    %%開啟圖形視窗
    case 'start',
        FigHandle = figure('WindowButtonDownFcn','MouseDraw down');
        axis([1 imSize 1 imSize]);    % 設(shè)定圖軸范圍
%         axis off;
        grid on;
        box on;     % 將圖軸加上圖框
        title('手寫體輸入窗');
% %         fprintf('start');
        %%設(shè)定滑鼠按鈕被按下時(shí)的反應(yīng)指令為「MouseDraw down」
        % set(gcf, 'WindowButtonDownFcn', 'MouseDraw down'); 
dlmwrite('IXT.txt', -10, 'delimiter', '\t', 'precision', 6);
        dlmwrite('IYT.txt', -10, 'delimiter', '\t', 'precision', 6);
        %%滑鼠按鈕被按下時(shí)的反應(yīng)指令
    case 'down',
        if strcmp(get(FigHandle, 'SelectionType'), 'normal')    %如果是左鍵
            set(FigHandle,'pointer','hand');     
            CurPiont = get(gca, 'CurrentPoint');
            InitialX = CurPiont(1,1);
            InitialY = CurPiont(1,2);
            dlmwrite('IXT.txt', InitialX, '-append', 'delimiter', '\t', 'precision', 6);
            dlmwrite('IYT.txt', InitialY, '-append', 'delimiter', '\t', 'precision', 6);
            % 列印「MouseDraw down!」訊息
% %             fprintf('MouseDraw down!\n');
            % 設(shè)定滑鼠移動(dòng)時(shí)的反應(yīng)指令為「MouseDraw move」
            set(gcf, 'WindowButtonMotionFcn', 'MouseDraw move');
            set(gcf, 'WindowButtonUpFcn', 'MouseDraw up');
        elseif strcmp(get(FigHandle, 'SelectionType'), 'alt')   % 如果是右鍵
            set(FigHandle, 'Pointer', 'arrow');
            set( FigHandle, 'WindowButtonMotionFcn', '')
            set(FigHandle, 'WindowButtonUpFcn', '')
            fprintf('MouseDraw right button down!\n');
            ImageX = importdata('IXT.txt');
            ImageY = importdata('IYT.txt');
            InputImage = ones(imSize);
            roundX = round(ImageX);
            roundY = round(ImageY);
            for k = 1:size(ImageX,1)
                if 0<roundX(k) && roundX(k)<imSize && 0<roundY(k) && roundY(k)<imSize
                    InputImage(roundX(k)-1:roundX(k)+2, roundY(k)-1:roundY(k)+2) = 0;
                end
            end
            InputImage = imrotate(InputImage,90);       % 圖像旋轉(zhuǎn)90
            figure(2);
            imshow(InputImage);
        end
    %%滑鼠移動(dòng)時(shí)的反應(yīng)指令
    case 'move',
        CurPiont = get(gca, 'CurrentPoint');
        X = CurPiont(1,1);
        Y = CurPiont(1,2);
        % 當(dāng)鼠標(biāo)移動(dòng)較快時(shí),不會(huì)出現(xiàn)離散點(diǎn)。
        % 利用y=kx+b直線方程實(shí)現(xiàn)。
        x_gap = 0.1;    % 定義x方向增量
        y_gap = 0.1;    % 定義y方向增量
        if X > InitialX
            step_x = x_gap;
        else
            step_x = -x_gap;
        end
        if Y > InitialY
            step_y = y_gap;
        else
            step_y = -y_gap;
        end 
        % 定義x,y的變化范圍和步長
        if abs(X-InitialX) < 0.01        % 線平行于y軸,即斜率不存在時(shí)
            iy = InitialY:step_y:Y;
            ix = X.*ones(1,size(iy,2));
        else
            ix = InitialX:step_x:X ;    % 定義x的變化范圍和步長
            % 當(dāng)斜率存在,即k = (Y-InitialY)/(X-InitialX) ~= 0
            iy = (Y-InitialY)/(X-InitialX).*(ix-InitialX)+InitialY;  
        end
        ImageX = [ix, X];
        ImageY = cat(2, iy, Y);
        line(ImageX,ImageY, 'marker', '.', 'markerSize',28, ...
            'LineStyle', '-', 'LineWidth', 4, 'Color', 'Red');
        dlmwrite('IXT.txt', ImageX, '-append', 'delimiter', '\t', 'precision', 6);
        dlmwrite('IYT.txt', ImageY, '-append', 'delimiter', '\t', 'precision', 6);
        InitialX = X;       %記住當(dāng)前點(diǎn)坐標(biāo)
        InitialY = Y;       %記住當(dāng)前點(diǎn)坐標(biāo)
        % 列印「MouseDraw is moving!」及滑鼠現(xiàn)在位置
        % fprintf('MouseDraw is moving! Current location = (%g, %g)\n', ...
          % CurPiont(1,1), CurPiont(1,2));
% %         fprintf('MouseDraw move!\n');
        % 設(shè)定滑鼠按鈕被釋放時(shí)的反應(yīng)指令為「MouseDraw up」
        % set(gcf, 'WindowButtonUpFcn', 'MouseDraw up');
    %%滑鼠按鈕被釋放時(shí)的反應(yīng)指令
    case 'up',
        % 清除滑鼠移動(dòng)時(shí)的反應(yīng)指令
        set(gcf, 'WindowButtonMotionFcn', '');
        % 清除滑鼠按鈕被釋放時(shí)的反應(yīng)指令
        set(gcf, 'WindowButtonUpFcn', '');
        % 列印「MouseDraw up!」
% %         fprintf('MouseDraw up!\n');
end

end

同樣MouseDraw.m也在Matlab 2010a上運(yùn)行過。

有不足之處,請(qǐng)不吝賜教!

    matlab
    (18)matlab
    西西軟件園提供.正式版以及其他好用的版本,小編推薦大家的是是免安裝的用過安裝版的都知道,裝一次非常耗時(shí)還要注冊(cè)碼而這兩個(gè)版本都是能夠放在盤里的,即插即用,現(xiàn)在的盤一般都在左右,能容得下了。是一款著名的商業(yè)數(shù)學(xué)軟件,是用于分析數(shù)據(jù)并且開發(fā)算法和應(yīng)用一種高級(jí)技術(shù)語言和發(fā)展環(huán)境,在編程和編碼效率的區(qū)域內(nèi)包括主要的新特徵,繪制和新特征包括的形象化,數(shù)學(xué),性能,和文件....更多>>
    • Matlab7.0R2007b 綠色U盤便攜破解版

      05-15 / 1.21G

      推薦理由:Matlab7.0全功能版的,雖然大了一點(diǎn),但是用起來不出問題!。ortablematlab是免安裝的;用過安裝版的都知
    • MatLab R2012b 特別文件

      03-01 / 4.4M

      推薦理由:MatLab 2012b的破解文件,內(nèi)附帶詳細(xì)的安裝圖文教程。 MATLAB和Mathematica、Maple、MathCAD并稱為四大數(shù)學(xué)
    • Matlab界面漢化包

      04-10 / 1.5M

      推薦理由:MATLAB是矩陣實(shí)驗(yàn)室(Matrix Laboratory)的簡稱,美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)
    • 多重網(wǎng)格算法matlab程序

      03-05 / 16KB

      推薦理由:多重網(wǎng)格求解橢圓型線性PDEs的標(biāo)量PDE規(guī)格需要使用的格式由PDE工具箱。這個(gè)幾何描述“g”和邊界條件描述“b
    • matlab圖像分割

      02-26 / 219KB

      推薦理由:程序代碼說明P0801:索書號(hào)文字圖像分割P0802:粘連字符切分P0803:文字識(shí)別P0804:彩色車牌分割P0805:商標(biāo)
    • matlab模擬軟件1.0 免費(fèi)版

      12-09 / 95KB

      推薦理由:用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語言和交互式環(huán)境,

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    第 1 樓 福建福州(連江縣)聯(lián)通ADSL 網(wǎng)友 客人 發(fā)表于: 2011/3/20 11:21:26
    為什么我的不能運(yùn)行呢?出錯(cuò)

    支持( 0 ) 蓋樓(回復(fù))

    最新評(píng)論

    第 2 樓 江蘇南京南京大學(xué) 網(wǎng)友 客人 發(fā)表于: 2011/5/7 20:44:46
    跪求使用方法

    支持( 0 ) 蓋樓(回復(fù))

    第 1 樓 福建福州(連江縣)聯(lián)通ADSL 網(wǎng)友 客人 發(fā)表于: 2011/3/20 11:21:26
    為什么我的不能運(yùn)行呢?出錯(cuò)

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)