MATLAB制作漂亮时钟.docx
《MATLAB制作漂亮时钟.docx》由会员分享,可在线阅读,更多相关《MATLAB制作漂亮时钟.docx(16页珍藏版)》请在冰豆网上搜索。
MATLAB制作漂亮时钟制作漂亮时钟MATLAB制作漂亮手表制作漂亮手表一、问题的提出一、问题的提出随着科技的日新月异,人们的生活节奏变得越来越快,而准确的把我时间也变得越来越重要,几乎人人都会携带可以知道时间的东西,比如手表,手机,怀表,于是在此提出问题,如何通过matlab数字化模拟日常生活中所用的手表的转动?
二、理论分析二、理论分析完整的时钟界面有时针,分针,秒针以及刻度等组成,而要用matlab模拟出这些部件,则只需由外至内,一部部的模拟出表面的图形,以及它的运转法则。
三、实验步骤三、实验步骤1.了解手表的表盘中由哪些东西构成,将需要通过matlab作出来的部件记下。
2.观察手表的秒针,分针,以及时针的运转规律,构想出通过matlab来实现指针的转动方法。
3.着手编写matlab程序来实现这一过程。
4.完成程序,检验程序的可行性,并完善,使作出来的手表表盘尽可能的美化。
5.完成实验报告。
四、程序实现四、程序实现1.画一个大的圆圈,表示手表的最外层的圈圈,通过plot画圆来实现,x,y用参数方程确定。
2.通过line画直线的方式,画出表盘中得分针和秒针的小的刻度,一共60个。
3.同样的方式,画出时针的大的刻度,一共12个,并在正上方的刻度下表上12.4.运用clock指令读取系统时间,并将其作为初始时间。
5.采用同样的方式分别做出第一、第二、第三个小圆盘,具体程序就不在此给出了。
6.分别做出大表盘以及小表盘中得指针,采用fill指令分别实现时针,分针和秒针。
在此列举大表盘中得时针做出方法。
7.加入以数字形式显示时间的指令,具体实现方法如下显示初始时间:
8.设计指针的运转,当秒针每转动一秒时,相应的改变大表盘中秒针,分针,以及时针的位置,以及小圆圈中得指针位置。
数据的改变:
大圆圈的指针数据:
小圆圈中指针的数据:
图像中指针的位置改变:
9.当指针转动一圈时,相应的数据应如何变化:
10.数字显示也许相应的改变:
11为使秒针的运动符合时间的规律,采用pause指令:
五、实验结果及结果分析五、实验结果及结果分析运行程序,得到结果:
六、程序及其说明六、程序及其说明clear;clf;%作出大的表盘%set(gcf,name,钟表,color,white);theta=linspace(0,2*pi,10000);r=10;x=r.*cos(theta);y=r.*sin(theta);shg;plot(x,y);axis(-1212-1512);axisequal;holdon;axis(off);text(-0.6,9,fontsize2012);theta0=;xa=;xb=;ya=;yb=;fori=1:
60%画出60个刻度theta0(i)=i*pi/30;xa=(r-0.3)*cos(theta0(i);xb=(r-0.3)*sin(theta0(i);ya=r*cos(theta0(i);yb=r*sin(theta0(i);line(xa;ya,xb;yb);endfori=1:
12%画出12个时针的刻度,为了美观,采取个别不画的原则ifi=1|i=3|i=5|i=9continueendtheta0(i)=i*pi/6;xa=(r-1.5)*cos(theta0(i);xb=(r-1.5)*sin(theta0(i);ya=(r-0.36)*cos(theta0(i);yb=(r-0.36)*sin(theta0(i);line(xa;ya,xb;yb,linewidth,3);endfori=1:
12%在60个小刻度的基础上对时针的刻度加粗theta0(i)=i*pi/6;xa=(r-0.3)*cos(theta0(i);xb=(r-0.3)*sin(theta0(i);ya=r*cos(theta0(i);yb=r*sin(theta0(i);line(xa;ya,xb;yb,linewidth,3);endt=clock;h0=t(4);%设定初始时间m0=t(5);s0=floor(t(6);thetas1=(15-s0)*pi/30;%计算3个小表盘中指针的初始角度thetam1=(15-m0)*pi/30-s0*pi/1800;thetah1=(6-h0)*pi/12-m0*pi/720-s0*pi/43200;%作第一个小表盘%r1_0=6;theta1_0=pi/6;r1=3;theta1=linspace(0,2*pi,10000);x1_0=r1_0*cos(theta1_0);y1_0=r1_0*sin(theta1_0);x1=x1_0+r1.*cos(theta1);y1=y1_0+r1.*sin(theta1);plot(x1,y1);theta_10=;x1a=;x1b=;y1a=;y1b=;fori=1:
12%画出第一个小表盘的刻度theta_10(i)=i*pi/6;x1a=x1_0+(r1-0.3)*cos(theta_10(i);x1b=y1_0+(r1-0.3)*sin(theta_10(i);y1a=x1_0+r1*cos(theta_10(i);y1b=y1_0+r1*sin(theta_10(i);line(x1a;y1a,x1b;y1b,linewidth,2);endtext(x1_0+r1-0.7,y1_0,6);%部分刻度给予数字显示text(x1_0-r1+0.1,y1_0,18);text(x1_0-0.4,y1_0-r1+0.5,12);text(x1_0-0.4,y1_0+r1-0.5,24);h1x1=x1_0+0.4*cos(thetah1-pi);h1y1=y1_0+0.4*sin(thetah1-pi);%作出第一个小表盘的指针h1x2=x1_0+0.2*cos(thetah1+pi/2);h1y2=y1_0+0.2*sin(thetah1+pi/2);h1x3=x1_0+1.8*cos(thetah1);h1y3=y1_0+1.8*sin(thetah1);h1x4=x1_0+0.2*cos(thetah1-pi/2);h1y4=y1_0+0.2*sin(thetah1-pi/2);h1=fill(h1x1,h1x2,h1x3,h1x4,h1x1,h1y1,h1y2,h1y3,h1y4,h1y1,g);plot(x1_0,y1_0,w.,markersize,6);%作第二个小表盘%r2_0=6;theta2_0=5*pi/6;r2=3;theta2=linspace(0,2*pi,10000);x2_0=r2_0*cos(theta2_0);y2_0=r2_0*sin(theta2_0);x2=x2_0+r2.*cos(theta2);y2=y2_0+r2.*sin(theta2);plot(x2,y2);theta_20=;x2a=;x2b=;y2a=;y2b=;fori=1:
60%画出第二个小表盘的刻度theta_20(i)=i*pi/30;x2a=x2_0+(r2-0.5)*cos(theta_20(i);x2b=y2_0+(r2-0.5)*sin(theta_20(i);y2a=x2_0+r2*cos(theta_20(i);y2b=y2_0+r2*sin(theta_20(i);line(x2a;y2a,x2b;y2b,linewidth,1);endtext(x2_0-0.3,y2_0+r2-0.8,60);%部分刻度给予数字显示text(x2_0+1.4,y2_0-1.2,20);text(x2_0-2,y2_0-1.2,40);s1x1=x2_0+0.4*cos(thetas1-pi);s1y1=y2_0+0.4*sin(thetas1-pi);%作出第二个小表盘的指针s1x2=x2_0+0.2*cos(thetas1+pi/2);s1y2=y1_0+0.2*sin(thetas1+pi/2);s1x3=x2_0+1.8*cos(thetas1);s1y3=y2_0+1.8*sin(thetas1);s1x4=x2_0+0.2*cos(thetas1-pi/2);s1y4=y2_0+0.2*sin(thetas1-pi/2);s1=fill(s1x1,s1x2,s1x3,s1x4,s1x1,s1y1,s1y2,s1y3,s1y4,s1y1,g);plot(x2_0,y2_0,w.,markersize,7);%添加中间小圆圈,美化表盘%fori=1:
60%画出12个时针的刻度,为了美观,采取个别不画的原则if(i=1&i=20&i=40&i60i=1;endthetas1=thetas1-pi/30;%时间走动时,变化相应的表盘的摆针的角度thetam1=thetam1-pi/1800;thetah1=thetah1-pi/43200;sx1=(r-8)*cos(thetas-i*pi/30+pi);sy1=(r-8)*sin(thetas-i*pi/30+pi);sx2=(r-0.3)*cos(thetas-i*pi/30);sy2=(r-0.3)*sin(thetas-i*pi/30);mx1=(r-6)*cos(thetam-j*pi/1800+pi/30);my1=(r-6)*sin(thetam-j*pi/1800+pi/30);mx2=(r-1.5)*cos(thetam-j*pi/1800);my2=(r-1.5)*sin(thetam-j*pi/1800);mx3=(r-6)*cos(thetam-j*pi/1800-pi/30);my3=(r-6)*sin(thetam-j*pi/1800-pi/30);hx1=(r-7)*cos(thetah-k*pi/21600+pi/25);hy1=(r-7)*sin(thetah-k*pi/21600+pi/25);hx2=(r-4)*cos(thetah-k*pi/21600);hy2=(r-4)*sin(thetah-k*pi/21600);hx3=(r-7)*cos(thetah-k*pi/21600-pi/25);hy3=(r-7)*sin(thetah-k*pi/21600-pi/25);s1x1=x2_0+0.4*cos(thetas1-pi);s1y1=y2_0+0.4*sin(thetas1-pi);s1x2=x2_0+0.2*cos(thetas1+pi/2);s1y2=y1_0+0.2*sin(thetas1+pi/2);s1x3=x2_0+1.8*cos(thetas1);s1y3=y2_0+1.8*sin(thetas1);s1x4=x2_0+0.2*cos(thetas1-pi/2);s1y4=y2_0+0.2*sin(thetas1-pi/2);m1x1=x3_0+0.4*cos(thetam1-pi);m1y1=y3_0+0.4*sin(thetam1-pi);m1x2=x3_0+0.2*cos(thetam1+pi/2);m1y2=y3_0+0.2*sin(thetam1+pi/2);m1x3=x3_0+1.8*cos(thetam1);m1y3=y3_0+1.8*sin(thetam1);m1x4=x3_0+0.2*cos(thetam1-pi/2);m1y4=y3_0+0.2*sin(thetam1-pi/2);h1x1=x1_0+0.4*cos(thetah1-pi);h1y1=y1_0+0.4*sin(thetah1-pi);h1x2=x1_0+0.2*cos(thetah1+pi/2);h1y2=y1_0+0.2*sin(thetah1+pi/2);h1x3=x1_0+1.8*cos(thetah1);h1y3=y1_0+1.8*sin(thetah1);h1x4=x1_0+0.2*cos(thetah1-pi/2);h1y4=y1_0+0.2*sin(thetah1-pi/2);set(s,xdata,sx1;sx2,ydata,sy1;sy2);%画出变化后的指针位置set(m,xdata,0,mx1,mx2,mx3,0,ydata,0,my1,my2,my3,0);set(h,xdata,0,hx1,hx2,hx3,0,ydata,0,hy1,hy2,hy3,0);set(m1,xdata,m1x1,m1x2,m1x3,m1x4,m1x1,ydata,m1y1,m1y2,m1y3,m1y4,m1y1);set(s1,xdata,s1x1,s1x2,s1x3,s1x4,s1x1,ydata,s1y1,s1y2,s1y3,s1y4,s1y1);set(h1,xdata,h1x1,h1x2,h1x3,h1x4,h1x1,ydata,h1y1,h1y2,h1y3,h1y4,h1y1);i=i+1;k=k+1;j=j+1;s0=s0+1;%计算当前时间ifs0=60s0=0;m0=m0+1;endifm0=60m0=0;h0=h0+1;endifh0=24h0=0;enddelete(time);%删除句柄ifs010&m010&h010%重新显示当前时间,判断时间的数字位数,选择是否在数字前面加0time=text(-3,-12,0,num2str(h0),:
0,num2str(m0),:
0,num2str(s0),fontsize,30,Fontname,TimesNewRoman);elseifs010&m0=10time=text(-3,-12,num2str(h0),:
0,num2str(m0),:
0,num2str(s0),fontsize,30,Fontname,TimesNewRoman);elseifs0=10&h010time=text(-3,-12,0,num2str(h0),:
num2str(m0),:
0,num2str(s0),fontsize,30,Fontname,TimesNewRoman);elseifs0=10&h0=10time=text(-3,-12,num2str(h0),:
num2str(m0),:
0,num2str(s0),fontsize,30,Fontname,TimesNewRoman);elseifs0=10&m010&h0=10&m0=10time=text(-3,-12,num2str(h0),:
0,num2str(m0),:
num2str(s0),fontsize,30,Fontname,TimesNewRoman);elseifs0=10&m0=10&h010time=text(-3,-12,0,num2str(h0),:
num2str(m0),:
num2str(s0),fontsize,30,Fontname,TimesNewRoman);elsetime=text(-3,-12,num2str(h0),:
num2str(m0),:
num2str(s0),fontsize,30,Fontname,TimesNewRoman);endendendendendendendpause(0.989);end