matlab写字,Matlab实现鼠标写字代码

4a16864fb0a9c1839e669dd283821537.png

类型:编程工具大小: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,运行结果截图如下:

358582eec48e6180e464f7c6d3e1cecd.png

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

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

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

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

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上运行过。

d88fff7c6ef3f135f2b9e3f545acd433.png

cc6ababbb0f8baa3785f8e655085c29c.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Linux]变量加减赋值以及将String转int

teddytoshiba~$ a"76"teddytoshiba~$ echo $((a3))79teddytoshiba~$ echo $((a-12))64teddytoshiba~$取文件名以及文件路径的脚本&#xff1a;#!/bin/shtmp$1filenameecho $1 | awk -F/ {print $(NF)}echo "filename":$filenamefilenamelengthecho | awk …

matlab在绘图时分数,第三章_Matlab图形绘制试卷.ppt

2、griddata函数&#xff0c;用来产生经插值后均匀间隔数据作图。常用的调用方法是&#xff1a;[XI,YI,ZI] griddata(x,y,z,XI,YI,’method’)&#xff0c;其中x,y,z来自关系式zf(x,y)&#xff0c;也可以是离散的数据点&#xff0c;ZI是有XI和YI插值后得到的对应点。其中metho…

from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...

打工人&#xff0c;打工魂&#xff0c;打工人是人上人&#xff01;最近&#xff0c;「打工人」这个词火了&#xff01;几乎一夜之间&#xff0c;很多人在和朋友打招呼时&#xff0c;都自称“打工人”。那“打工人”是什么意思&#xff1f;这里的“打工人”&#xff0c;其实是对…

fbset

fbset用于读取和设置framebuffer的参数。# fbset mode "800x480-112"# D: 64.998 MHz, H: 58.034 kHz, V: 112.035 Hzgeometry 800 480 800 480 16timings 15385 220 40 21 7 60 10accel falsergba 5/11,6/5,5/0,0/0 endmode

mysql中更新的命令是,mysql命令总结(陆续更新中)

批量mysql 数据导入 load data local infile xx into table xx;连接数据库&#xff1a;mysql -h hostname -P port -u username -p -D databasename查看提供什么存储引擎&#xff1a;show engines;查看当前引擎&#xff1a;show variables like %storage_engine%;查看表使用了…

STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)

前言大概半个月之前捣鼓了下利用STM32实现实时曲线显示&#xff0c;中间又做了一点小改进和扩充&#xff0c;在这里更新一下&#xff1a;利用DMA进行缓冲区到LCD GRAM的像素数据搬运效果更好的曲线绘制策略代码可以在这里找到&#xff1a;<写得比较乱&#xff0c;望谅解( &a…

Vmware虚拟机三种网络模式详解

原文来自http://note.youdao.com/share/web/file.html?id236896997b6ffbaa8e0d92eacd13abbf&typenote 我怕链接会失效&#xff0c;故转载此篇文章。通过这篇文章&#xff0c;我对之前疑惑的地方有了直观的理解&#xff0c;很多地方并没有自己动手实践&#xff0c;所以这篇…

ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...

模块对应cabin_controllers/serial_to_mcu。模块实现的功能为监听网络中PWM矩阵信息&#xff0c;将其转换成十六进制数据通过串口下发至MCU&#xff0c;实现对推进器电机的控制。模块数据的串口通信借助了ros的serial工具包&#xff08;sudo apt-get install ros-melodic-seria…

2018php项目实战视频教程,2018PHP实战技术VIP在线学习视频课程

课程目录&#xff1a;1-1 疯狂讲义之web简介2-1 从搭建PHP开发环境开始2-2 第一个PHP程序2-3 PHP变量相关知识2-4 PHP数据类型2-5 PHP数据类型之进制转换2-6 PHP数据类型之浮点型2-7 PHP数据类型系统函数简介3-1 PHP数据类型字符串的声明与定义3-2 数据类型之数组、资源、null类…

Struts1.x在MyEclipse中的环境搭建和配置

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; 先解压Struts-1.3.10-all.zip的文件夹Struts-1.3.10-all备用 -> 打开MyEclipse -> 新建一个 web project -> 在工程名上按右键鼠标选 Properties -> 弹出 Properties 面板 …

iphone固件降级_iPhone无法开机怎么办?三种快速维修方法

苹果手机的流畅让许多用户为之买单&#xff0c;但毕竟是电子产品&#xff0c;难免会有一些故障&#xff0c;其中无法开机就是一个很头疼的问题&#xff0c;一方面担心手机报废&#xff0c;一方面担心修理费过高&#xff0c;而造成 iPhone 无法开机的原因有很多&#xff0c;这里…

strspn函数php,php strspn函数怎么用?

strspn()函数是PHP中的一个内置函数&#xff0c;语法为strspn(string,charlist,start,length)&#xff0c;用于返回在字符串中包含 charlist 参数中指定字符的数目。php strspn()函数怎么用&#xff1f;strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。语法&a…

【转载】架构师需要了解的Paxos原理、历程及实战

原文链接&#xff0c;请参见&#xff1a;http://weibo.com/ttarticle/p/show?id2309403952892003376258 数据库高可用性难题 数据库的数据一致和持续可用对电子商务和互联网金融的意义不言而喻&#xff0c;而这些业务在使用数据库时&#xff0c;无论 MySQL 还是 Oracle&#x…

酷冷至尊官方psu计算工具_酷冷至尊为Raspberry Pi推出Pi Case 40机壳,提供被动散热、卖27美元起...

Raspberry Pi(树莓派)是众所周知的廉价Single Board Computer&#xff0c;虽然名字里面有个“电脑”&#xff0c;但与我们一般广泛认知的台式机不同&#xff0c;它基本都是裸着一块主机板来使用&#xff0c;显得很极客、创客&#xff0c;当然也还是有一些玩家自制或者小作坊给R…

dede plus ad js.php,织梦程序中plus文件作用介绍及安全设置

官方网站下载了Dedecms安装包以后&#xff0c;解压出来&#xff0c;有一个uploads文件&#xff0c;这里面的文件夹才是网站的安装文件&#xff0c;里面文件很多&#xff0c;今天织梦58就主要介绍下plus文件夹里面的各个功能模块&#xff0c;如果你只是做一个宣传网站的话&#…

一个websocket 可以多个页面创建吗_实战分享|给我一个Puppeteer,没有爬不了的网站

Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包&#xff0c;用来模拟 Chrome 浏览器的运行。我们团队从 Puppeteer 刚发布出来就开始成为忠实用户了(主要是因为 PhantomJs 坑太多了)&#xff0c;本文主要在介绍 Puppeteer 的同时&#xff0c;结合我们平时的实践…

Jquery实战——横纵向的菜单

横纵向的菜单效果&#xff0c;点击纵向菜单显示其子菜单。鼠标指向横菜单的时候。显示其子菜单&#xff0c;鼠标离开&#xff0c;子菜单隐藏。 HTML代码&#xff1a; <span style"font-size:18px;"><!DOCTYPE html> <html xmlns"http://www.w3.o…

基于php的工厂管理系统,PHP设计模式——工厂模式

工厂模式&#xff0c;工厂方法或者类生成对象&#xff0c;而不是在代码中直接new。 使用工厂模式&#xff0c;可以避免当改变某个类的名字或者方法之后&#xff0c;在调用这个类的所有的代码中都修改它的名字或者参数。示例&#xff1a;Test1.phpclass Test1{static function t…

c++ 工厂模式_大连中山融雪剂工厂自营工厂批发

摘要&#xff1a; 大连中山融雪剂工厂自营工厂大连中山 源头工厂一站式采购 直发 大量库存 优势柠檬酸 欢迎选购 柠檬酸(Citric Acid&#xff0c;简称CA)是一种重要的有机酸&#xff0c;又名枸橼酸&#xff0c;分子式C₆H₈O₇&#xff0c;无色晶体&#xff0c;常含一分子结晶水…

开源Registry项目Harbor源代码结构解析

2019独角兽企业重金招聘Python工程师标准>>> 上周我们介绍了Harbor开源企业级容器Registry的架构&#xff0c;获得了社区很多朋友的反馈和建议&#xff0c;再次一并感谢&#xff0c;希望和大家一起&#xff0c;共同建设一个优秀的开源项目。本文请Harbor项目工程师尹…