MATLAB网红罗盘时钟
与实际时间一致的罗盘时钟
先看效果(颜色比较丑)
代码附上
%%网红罗盘时钟,基本与当前时间同步
%%%%差距区别于计算机的运算速度 速度越快,精度越高
clc
close
clear
tic
T=clock;
%%参数输入
sss=1;%%秒针的步时设施 正常为1秒 很小时用于检测程序正确性 即快进设置
A=[3,22,9,14,40];%%%(月,日,时,分,秒) %%设置起始时间
xx=-6;
yy=-13;
%%**************程序主体*************************************
for i=2:length(T)
A(i-1)=fix(T(i));
end
y1=A(1);
r1=A(2);
s1=A(3);
ff1=A(4);
mm1=A(5);
yyy='m';%%月轮盘颜色
rrr='m';%%日轮盘颜色
ssss='m';%%时轮盘颜色
fff='m';%%分轮盘颜色
mmm='m';%%秒轮盘颜色
%%******以上为初始参数%**************************************
%%下边几句是火柴棍时间的准备语句
x=[-1.6,13,13,-1.6,-1.6];
y=[-0.5,-0.5,0.5,0.5,-0.5];
plot(x,y)
xa=0.5;
ya=0.6;
ba=12;
aa=-2;
plot([aa+1.65],[ba+3*ya/2],'.','color','b')
hold on
plot([aa+1.65],[ba+ya/2],'.','color','b')
hold on
S=[1
1];
% h0=plot(A(k,1),A(k,2),'*','erasemode','none');
hh1=plot(S(1,:),S(2,:),'color','b','erasemode','none');
hold on
hh2=plot(S(1,:),S(2,:),'color','b','erasemode','none');
hh3=plot(S(1,:),S(2,:),'color','b','erasemode','none');
hh4=plot(S(1,:),S(2,:),'color','b','erasemode','none');
hh5=plot(S(1,:),S(2,:),'color','b','erasemode','none');
hh6=plot(S(1,:),S(2,:),'color','b','erasemode','none');
%%以上是火柴棍时间的准备语句
%以下是罗盘时间的准备语句
axis([-15,15,-15,15]);
set(gcf,'Unit','normalized','Position',[0,0,0.6,1])
h=text(xx,yy,'');
fc = sprintf('公元 %d年',T(1));
hc=text(-1.4,0,fc,'rotation',0);
%%秒罗盘的设置
for k=1:60
f0 = sprintf(' %d秒',60-k);
h0(k)=text(0,0,f0,'rotation',0,'color',mmm);
end
%%分罗盘的设置
for k=1:60
f1 = sprintf(' %d分',60-k);
h1(k)=text(0,0,f1,'rotation',0,'color',fff);
end
%%时罗盘的设置
for k=1:24
f2 = sprintf(' %d时',24-k);
h2(k)=text(0,0,f2,'rotation',0,'color',ssss);
end
%%月罗盘的设置
for k=1:12
f4= sprintf(' %d月',13-k);
h4(k)=text(0,0,f4,'rotation',0,'color',yyy);
end
for y=y1:12 %%月计时
for yh=1:12%%月画图
set(h4(yh),'rotation',-30*(yh+y-1))
end
ys=[31 28 31 30 31 30 31 31 30 31 30 31];
if mod(T(1),4)~=0
ys(2)=29;
end
%%日罗盘的设置
for k3=1:ys(y)
f3 = sprintf(' %d日',ys(y)-k3+1); %获得位置
h3(k3)=text(0,0,f3,'rotation',0,'color',rrr);
end
if y~=y1
r1=1;
end
for r=r1:ys(y) %%日计时
for rh=1:ys(y)%%日画图
set(h3(rh),'rotation',-(360/ys(y))*(rh+r-1))
end
if r~=r1
s1=1;
end
for s=s1:24 %%时计时
for sh=1:24%%时画图
set(h2(sh),'rotation',-15*(sh+s))
end
if s~=s1
ff1=1;
end
for f=ff1:60 %%分计时
for fh=1:60%%分画图
set(h1(fh),'rotation',-6*(fh+f))
end
if f~=ff1
mm1=1;
end
for m=mm1:60 %%秒计时
for mh=1:60%%秒画图
set(h0(mh),'rotation',-6*(mh+m))
end
pause(sss*0.992)
set(h,'string',sprintf('当前时间为:公元 %d年 %d 月 %d 日 %d 时 %d 分 %d 秒',T(1),y,r,s,f,m+1),'color','b')
%%以下是画火柴棍时间的语句
s11=fix(s/10);
s12=s-s11*10;
f11=fix(f/10);
f12=f-f11*10;
m11=fix((m+1)/10);
m12=m+1-m11*10;
S=[1
1];
[S1]=FX(s11,1,ya,ba,xa,aa);
[S2]=FX(s12,2,ya,ba,xa,aa);
[F1]=FX(f11,3,ya,ba,xa,aa);
[F2]=FX(f12,4,ya,ba,xa,aa);
[M1]=FX(m11,5,ya,ba,xa,aa);
[M2]=FX(m12,6,ya,ba,xa,aa);
set(hh1,'Xdata',S1(1,:),'Ydata',S1(2,:))
set(hh2,'Xdata',S2(1,:),'Ydata',S2(2,:))
set(hh3,'Xdata',F1(1,:),'Ydata',F1(2,:))
set(hh4,'Xdata',F2(1,:),'Ydata',F2(2,:))
set(hh5,'Xdata',M1(1,:),'Ydata',M1(2,:))
set(hh6,'Xdata',M2(1,:),'Ydata',M2(2,:))
end%%秒结束
end%%分结束
end%%时结束
end%%日结束
end%%月结束