MATLAB制作漂亮时钟.docx
- 文档编号:9987987
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:19
- 大小:88.86KB
MATLAB制作漂亮时钟.docx
《MATLAB制作漂亮时钟.docx》由会员分享,可在线阅读,更多相关《MATLAB制作漂亮时钟.docx(19页珍藏版)》请在冰豆网上搜索。
MATLAB制作漂亮时钟
MATLAB制作漂亮手表1
一、问题的提出1
二、理论分析1
三、实验步骤1
四、程序实现2
五、实验结果及结果分析5
六、程序及其说明8
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,'\fontsize{20}12');
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]);
end
fori=1:
12%画出12个时针的刻度,为了美观,采取个别不画的原则
ifi==1||i==3||i==5||i==9
continue
end
theta0(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);
end
fori=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);
end
t=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);
end
text(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);
end
text(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<=10)||(i>=20&&i<=30)||(i>=40&&i<=50)||i==60
continue
end
theta0(i)=i*pi/30;
xa=(r-4.8)*cos(theta0(i));
xb=(r-4.8)*sin(theta0(i));
ya=(r-4.5)*cos(theta0(i));
yb=(r-4.5)*sin(theta0(i));
ifi==15||i==35||i==55
line([xa;ya],[xb;yb],'linewidth',2);
continue
end
line([xa;ya],[xb;yb],'linewidth',1);
end
%%%%%%作出第三个小表盘%%%%%%%%
r3_0=6;theta3_0=3*pi/2;
r3=3;theta3=linspace(0,2*pi,10000);
x3_0=r3_0*cos(theta3_0);
y3_0=r3_0*sin(theta3_0);
x3=x3_0+r3.*cos(theta3);
y3=y3_0+r3.*sin(theta3);
plot(x3,y3);
theta_30=[];x3a=[];x3b=[];y3a=[];y3b=[];
fori=1:
60%画出第三个小表盘的刻度
theta_30(i)=i*pi/30;
x3a=x3_0+(r3-0.2)*cos(theta_30(i));
x3b=y3_0+(r3-0.2)*sin(theta_30(i));
y3a=x3_0+r3*cos(theta_30(i));
y3b=y3_0+r3*sin(theta_30(i));
ifi==14||i==15||i==16||i==30||i==44||i==45||i==46||i==60
continue
end
line([x3a;y3a],[x3b;y3b],'linewidth',1);
end
fori=1:
12%整分的刻度给予加粗
ifi==3||i==6||i==9||i==12
continue
end
theta_30(i)=i*pi/6;
x3a=x3_0+(r3-0.5)*cos(theta_30(i));
x3b=y3_0+(r3-0.5)*sin(theta_30(i));
y3a=x3_0+r3*cos(theta_30(i));
y3b=y3_0+r3*sin(theta_30(i));
line([x3a;y3a],[x3b;y3b],'linewidth',1);
end
text(x3_0-0.3,y3_0+r3-0.3,'60','fontsize',10);%部分刻度给予数字显示
text(x3_0-0.3,y3_0-r3+0.3,'30','fontsize',10);
text(x3_0+2.4,y3_0,'15','fontsize',8);
text(x3_0-2.9,y3_0,'45','fontsize',8);
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);
m1=fill([m1x1,m1x2,m1x3,m1x4,m1x1],[m1y1,m1y2,m1y3,m1y4,m1y1],'g');
plot(x3_0,y3_0,'w.','markersize',7);
%%%%%%作出大表盘的指针%%%%%%%
thetas=(15-s0)*pi/30;
thetam=(15-m0)*pi/30-s0*pi/1800;
thetah=(3-h0)*pi/6-m0*pi/360-s0*pi/21600;
hx1=(r-7)*cos(thetah+pi/25);
hy1=(r-7)*sin(thetah+pi/25);
hx2=(r-4)*cos(thetah);
hy2=(r-4)*sin(thetah);
hx3=(r-7)*cos(thetah-pi/25);
hy3=(r-7)*sin(thetah-pi/25);
h=fill([0,hx1,hx2,hx3,0],[0,hy1,hy2,hy3,0],'g');%作出大表盘的时针
plot(0,0,'g.','markersize',40);
mx1=(r-6)*cos(thetam+pi/30);
my1=(r-6)*sin(thetam+pi/30);
mx2=(r-1.5)*cos(thetam);
my2=(r-1.5)*sin(thetam);
mx3=(r-6)*cos(thetam-pi/30);
my3=(r-6)*sin(thetam-pi/30);
m=fill([0,mx1,mx2,mx3,0],[0,my1,my2,my3,0],'r');%作出大表盘的分针
plot(0,0,'r.','markersize',30);
sx1=(r-8)*cos(thetas+pi);
sy1=(r-8)*sin(thetas+pi);
sx2=(r-0.3)*cos(thetas);
sy2=(r-0.3)*sin(thetas);
s=line([sx1;sx2],[sy1;sy2],'color','m','linewidth',3);%作出大表盘的秒针
plot(0,0,'m.','markersize',20);
i=1;j=1;k=1;
time=text(0,-12,[num2str(h0),':
',num2str(m0),':
',num2str(s0)]);%以数字格式显示初始时间
while1
ifi>60
i=1;
end
thetas1=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==60
s0=0;
m0=m0+1;
end
ifm0==60
m0=0;
h0=h0+1;
end
ifh0==24
h0=0;
end
delete(time);%删除句柄
ifs0<10&&m0<10&&h0<10%重新显示当前时间,判断时间的数字位数,选择是否在数字前面加0
time=text(-3,-12,['0',num2str(h0),':
0',num2str(m0),':
0',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0<10&&m0<10&&h0>=10
time=text(-3,-12,[num2str(h0),':
0',num2str(m0),':
0',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0<10&&m0>=10&&h0<10
time=text(-3,-12,['0',num2str(h0),':
',num2str(m0),':
0',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0<10&&m0>=10&&h0>=10
time=text(-3,-12,[num2str(h0),':
',num2str(m0),':
0',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0>=10&&m0<10&&h0<10
time=text(-3,-12,['0',num2str(h0),':
0',num2str(m0),':
',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0>=10&&m0<10&&h0>=10
time=text(-3,-12,[num2str(h0),':
0',num2str(m0),':
',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elseifs0>=10&&m0>=10&&h0<10
time=text(-3,-12,['0',num2str(h0),':
',num2str(m0),':
',num2str(s0)],'fontsize',30,'Fontname','TimesNewRoman');
elsetime=text(-3,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 制作 漂亮 时钟
![提示](https://static.bdocx.com/images/bang_tan.gif)