西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → Matlab实现鼠标写字代码

Matlab实现鼠标写字代码

相关软件相关文章发表评论 来源:本站整理时间:2010/12/28 0:57:54字体大小:A-A+

作者:佚名点击:708次评论:0次标签: Matlab 矩阵

  • 类型:编程工具大小:1.5M语言:中文 评分:1.2
  • 标签:
立即下载

最早的程序,实在忘了从哪里下载的了。能够实现鼠标的手写输入,但是一些不连续的点。

tmouse.m
function tmouse(action)
% TMOUSE 本例展示如何以Handle Graphics来设定滑鼠事件(Mouse
% Events)的反应指令(Callbacks)
if nargin == 0
    action = 'start';
end
switch(action)
  % 开启图形视窗
  case 'start',
   axis([0 1 0 1]);% 设定图轴范围
   box on;% 将图轴加上图框
   title('Click and drag your mouse in this window!');
   % 设定滑鼠按钮被按下时的反应指令为「tmouse down」
   set(gcf, 'WindowButtonDownFcn', 'tmouse down');

  % 滑鼠按钮被按下时的反应指令
  case 'down',
   % 设定滑鼠移动时的反应指令为「tmouse move」
   set(gcf, 'WindowButtonMotionFcn', 'tmouse move');
   % 设定滑鼠按钮被释放时的反应指令为「tmouse up」
   set(gcf, 'WindowButtonUpFcn', 'tmouse 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
end
 

本人在Matlab 2010a上运行过该程序tmouse.m,运行结果截图如下:

  

 之后有人在此基础上,把画点改成了连续的线段。

本人觉得程序还有点小问题,在此不再转载。

下面是本人改进的程序,能够实现点击左键输入,右键显示输入的记录结果。

MouseDraw.m
function  MouseDraw(action)
% MouseDraw 本例展示如何以Handle Graphics来设定滑鼠事件
% (MouseDraw Events)的反应指令(Callbacks)

% 本程序在鼠标移动非常快时,不会造成画“断线”
% 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]);    % 设定图轴范围
%         axis off;
        grid on;
        box on;     % 将图轴加上图框
        title('手写体输入窗');
% %         fprintf('start');
        %%设定滑鼠按钮被按下时的反应指令为「MouseDraw down」
        % set(gcf, 'WindowButtonDownFcn', 'MouseDraw down'); 
dlmwrite('IXT.txt', -10, 'delimiter', '\t', 'precision', 6);
        dlmwrite('IYT.txt', -10, 'delimiter', '\t', 'precision', 6);
        %%滑鼠按钮被按下时的反应指令
    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');
            % 设定滑鼠移动时的反应指令为「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);       % 图像旋转90
            figure(2);
            imshow(InputImage);
        end
    %%滑鼠移动时的反应指令
    case 'move',
        CurPiont = get(gca, 'CurrentPoint');
        X = CurPiont(1,1);
        Y = CurPiont(1,2);
        % 当鼠标移动较快时,不会出现离散点。
        % 利用y=kx+b直线方程实现。
        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轴,即斜率不存在时
            iy = InitialY:step_y:Y;
            ix = X.*ones(1,size(iy,2));
        else
            ix = InitialX:step_x:X ;    % 定义x的变化范围和步长
            % 当斜率存在,即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;       %记住当前点坐标
        InitialY = Y;       %记住当前点坐标
        % 列印「MouseDraw is moving!」及滑鼠现在位置
        % fprintf('MouseDraw is moving! Current location = (%g, %g)\n', ...
          % CurPiont(1,1), CurPiont(1,2));
% %         fprintf('MouseDraw move!\n');
        % 设定滑鼠按钮被释放时的反应指令为「MouseDraw up」
        % set(gcf, 'WindowButtonUpFcn', 'MouseDraw up');
    %%滑鼠按钮被释放时的反应指令
    case 'up',
        % 清除滑鼠移动时的反应指令
        set(gcf, 'WindowButtonMotionFcn', '');
        % 清除滑鼠按钮被释放时的反应指令
        set(gcf, 'WindowButtonUpFcn', '');
        % 列印「MouseDraw up!」
% %         fprintf('MouseDraw up!\n');
end

end

同样MouseDraw.m也在Matlab 2010a上运行过。

有不足之处,请不吝赐教!

    matlab
    (18)matlab
    西西软件园提供.正式版以及其他好用的版本,小编推荐大家的是是免安装的用过安装版的都知道,装一次非常耗时还要注册码而这两个版本都是能够放在盘里的,即插即用,现在的盘一般都在左右,能容得下了。是一款著名的商业数学软件,是用于分析数据并且开发算法和应用一种高级技术语言和发展环境,在编程和编码效率的区域内包括主要的新特徵,绘制和新特征包括的形象化,数学,性能,和文件....更多>>
    • Matlab7.0R2007b 绿色U盘便携破解版

      05-15 / 1.21G

      推荐理由:Matlab7.0全功能版的,虽然大了一点,但是用起来不出问题!!!portablematlab是免安装的;用过安装版的都知
    • MatLab R2012b 特别文件

      03-01 / 4.4M

      推荐理由:MatLab 2012b的破解文件,内附带详细的安装图文教程。 MATLAB和Mathematica、Maple、MathCAD并称为四大数学
    • Matlab界面汉化包

      04-10 / 1.5M

      推荐理由:MATLAB是矩阵实验室(Matrix Laboratory)的简称,美国MathWorks公司出品的商业数学软件,用于算法开发、数
    • 多重网格算法matlab程序

      03-05 / 16KB

      推荐理由:多重网格求解椭圆型线性PDEs的标量PDE规格需要使用的格式由PDE工具箱。这个几何描述“g”和边界条件描述“b
    • matlab图像分割

      02-26 / 219KB

      推荐理由:程序代码说明P0801:索书号文字图像分割P0802:粘连字符切分P0803:文字识别P0804:彩色车牌分割P0805:商标
    • matlab模拟软件1.0 免费版

      12-09 / 95KB

      推荐理由:用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    第 1 楼 福建福州(连江县)联通ADSL 网友 客人 发表于: 2011/3/20 11:21:26
    为什么我的不能运行呢?出错

    支持( 0 ) 盖楼(回复)

    最新评论

    第 2 楼 江苏南京南京大学 网友 客人 发表于: 2011/5/7 20:44:46
    跪求使用方法

    支持( 0 ) 盖楼(回复)

    第 1 楼 福建福州(连江县)联通ADSL 网友 客人 发表于: 2011/3/20 11:21:26
    为什么我的不能运行呢?出错

    支持( 0 ) 盖楼(回复)

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)