一年前曾经用matlab的gui做了一个时钟,由于是直接用GUIDE和ActiveX控件写的,程序虽说有许多行,大多数都是自动生成的,自己写的只有十几行而已。闲着没事,就耗费了下午的时间用matlab和Java分别又写了写。具体代码如下:

1.matlab脚本文件:

  1. %%%%%%%%%%%%%%%设置图像属性并获取图像句柄%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. h=figure('name','我的时钟','NumberTitle','off','color',[1 1 0]);
  3. set(h,'menubar','none','position',[200,200,400,450]);
  4. %%%%%%%%%%%%画出时钟的外轮廓%%%%%%%%%%%%%%
  5. s1=[0:pi/1000:2*pi];
  6. hl=plot(2*cos(s1),2*sin(s1),'black','linewidth',1.5);
  7. axis equal
  8. title('我的时钟');
  9. hold on
  10. %%%%%%%%%%%绘制表盘刻度%%%%%%%%%%%%%%%%%%
  11. for n=pi*2:-pi/30:pi/30 %绘制表盘,绘制分钟的刻度
  12. a1=0.95*cos(n):0.000005*cos(n)/2:cos(n);b1=0.95*sin(n):0.000005*sin(n)/2:sin(n);
  13. plot(2*a1,2*b1,'r-');
  14. end
  15. for n=pi*2:-pi/6:pi/30 %绘制表盘,绘制小时的刻度
  16. a1=0.9*cos(n):0.1*cos(n)/2:cos(n);b1=0.9*sin(n):0.1*sin(n)/2:sin(n);
  17. plot(2*a1,2*b1,'r-');
  18. end
  19. text(1.5,0,'3','FontSize',12)
  20. text(-0.05,-1.7,'6','FontSize',12)
  21. text(-1.7,0,'9','FontSize',12)
  22. text(-0.1,1.7,'12','FontSize',12)
  23. %%%%%%%%%%%%%%%%获取当前时间并进行角度与弧度转换%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  24. axis([-2.1 2.1 -2.1 2.1])
  25. time=datestr(now);
  26. sec=pi/2-str2num(time(19:20))*pi/30;
  27. min=pi/2-(str2num(time(16:17))+sec/60)*pi/30;
  28. hour=pi/2-(str2num(time(13:14))+min/60)*pi/6;
  29. w1=-pi/30;
  30. w2=-pi/1800;
  31. w3=-pi/108000;
  32. pausetime=1;
  33. %%%%%%%%%%%%%%%%开始绘图并不断刷新%%%%%%%%%%%%
  34. while 1
  35. axis off
  36. x1=0:0.75*cos(sec)/2:0.75*cos(sec);y1=0:0.75*sin(sec)/2:0.75*sin(sec); %根据秒针的位置绘制分针
  37. x2=0:0.6*cos(min)/2:0.6*cos(min);y2=0:0.6*sin(min)/2:0.6*sin(min); %根据分针的位置绘制分针
  38. x3=0:0.45*cos(hour)/2:0.45*cos(hour);y3=0:0.45*sin(hour)/2:0.45*sin(hour); %根据时针的位置绘制分针
  39. hp1=plot(2*x1,2*y1,'r-','linewidth',1.5);
  40. hp2=plot(2*x2,2*y2,'b-','linewidth',2);
  41. hp3=plot(2*x3,2*y3,'g-','linewidth',3.5);
  42. sec=sec+w1*pausetime; %计算一秒以后秒针的角度位置
  43. min=min+w2*pausetime; %计算一秒以后分针的角度位置
  44. hour=hour+w3*pausetime;
  45. pause(1);
  46. delete(hp1);
  47. delete(hp2);
  48. delete(hp3);
  49. end

2.Java应用文件(文件名为MyClock.java)

  1. import java.awt.*;
  2. import java.util.GregorianCalendar;
  3. import javax.swing.*;
  4. import javax.swing.Timer;
  5. import java.util.*;
  6. import java.awt.event.*;
  7. public class MyClock extends JPanel
  8. {
  9.  
  10. final double RAD=Math.PI/180;//角度与弧度的转化
  11.  
  12. public void paint(Graphics g)
  13. {
  14. super.paint(g);//调用父类方法
  15. Graphics2D g2=(Graphics2D)g;//主要用于改变线条粗细
  16. int h=getSize().height;//获取窗口的长和宽,主要用于当用鼠标改变窗口时,时钟也跟着变化
  17. int w=getSize().width;
  18. int hour,min,sec,hh,mm,ss;
  19. double x,y;
  20. setBackground(Color.yellow);//设置背景值
  21. g.setColor(Color.black);//画笔颜色
  22. int r=(Math.min(h, w)/2-50);
  23. float x0=w/2;//时钟中心位置
  24. float y0=h/2;
  25.  
  26. g2.setFont(new Font("楷体",Font.PLAIN,20));
  27. g2.drawString("我的时钟",165, 50);
  28. g2.setFont(new Font("Times New Roman",Font.PLAIN,20));
  29. g2.drawString("Designed by TW",235, 420);
  30.  
  31. g.drawString("12",(int)(w/2)-5,(int)(h/2)-r+30);
  32. g.drawString("3",(int)(w/2)-25+r,Math.round(h/2)+10);
  33. g.drawString("6",(int)(w/2),(int)(h/2)+r-20);
  34. g.drawString("9",(int)(w/2)-r+20,Math.round(h/2)+10);
  35.  
  36. //设置分钟刻度 之所以没有用线条,主要是因为drawline的参数要求是整数,因此刻度会不准确
  37. for(int i=1;i<=12;i++)
  38. {
  39. double buffer=Math.PI*(0.5-i/6.0);
  40. int posX = (int)Math.round(x0+r*Math.cos(buffer));
  41. int posY = (int)Math.round(y0-r*Math.sin(buffer));
  42. g.setColor(Color.red);
  43. g.fill3DRect(posX, posY, 8, 8, true);
  44. }
  45. //设置秒钟刻度
  46.  
  47. for(int i=1;i<60;i++)
  48. {
  49. if(i%5!=0)
  50. {
  51. double buffer= Math.PI*i/30.0;
  52. int posX = (int)Math.round(x0+r*Math.cos(buffer));
  53. int posY = (int)Math.round(y0-r*Math.sin(buffer));
  54. g.setColor(Color.black);
  55. g.fill3DRect(posX, posY, 6, 6, false);
  56. }
  57. }
  58. //获取当前系统时间
  59.  
  60. GregorianCalendar date=new GregorianCalendar();
  61. hour=(int)date.get(Calendar.HOUR);
  62. min=(int)date.get(Calendar.MINUTE);
  63. sec=(int)date.get(Calendar.SECOND);
  64. // System.out.println(hour);
  65. // System.out.println(min);
  66. // System.out.println(sec);
  67. //进行角度换算
  68. ss=90-sec*6;
  69. mm=90-min*6;
  70. hh=90-hour*30-min/2;
  71. //画出时分秒的指针
  72. g2.setStroke(new BasicStroke(1.0f));
  73. x=(int)(r*0.9*Math.cos(RAD*ss)+x0);
  74. y=(int)(r*0.9*Math.sin(RAD*ss)+y0);
  75. g.setColor(Color.red);
  76. g.drawLine((int)(x0),(int)(y0),(int)x,(int)(h-y));
  77.  
  78. g2.setStroke(new BasicStroke(2.2f));
  79. x=(int)(r*0.7*Math.cos(RAD*mm)+x0);
  80. y=(int)(r*0.7*Math.sin(RAD*mm)+y0);
  81. g.setColor(Color.blue);
  82. g.drawLine((int)x0,(int)y0,(int)x,(int)(h-y));
  83. g2.setStroke(new BasicStroke(3.4f));
  84. x=(int)(r*0.5*Math.cos(RAD*hh))+x0;
  85. y=(int)(r*0.5*Math.sin(RAD*hh))+y0;
  86. g.setColor(Color.green);
  87. g.drawLine((int)x0,(int)y0,(int)x,(int)(h-y));
  88.  
  89. }
  90.  
  91. //设置窗口大小
  92. public Dimension getPreferredSize()
  93. {
  94. return new Dimension(400,450);
  95. }
  96. //
  97. public static void main(String[] args)
  98. {
  99. Graphics g=null;
  100. JFrame frame=new JFrame("我的时钟");
  101. Container contentPane=frame.getContentPane();
  102. final MyClock tw=new MyClock();
  103. contentPane.add(tw,BorderLayout.CENTER);
  104. frame.pack();
  105. frame.setVisible(true);
  106. //用于画板的刷新
  107. int delay=1000;
  108. //创建一个监听事件
  109. ActionListener drawClock=new ActionListener()
  110. {
  111. public void actionPerformed(ActionEvent evt)
  112. {
  113. tw.repaint();
  114. }
  115. };
  116.  
  117. //创建一个时间计数器,每一秒触发一次
  118. new Timer(delay,drawClock).start();
  119.  
  120. }
  121. }

运行结果如下图:

1.matlab时钟界面:

2.Java时钟界面

原文:http://blog.csdn.net/tengweitw/article/details/21468723

作者:nineheadedbird

【Matlab编程】Matlab及Java小时钟的更多相关文章

  1. MATLAB 编程风格指南及注意事项

    MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...

  2. Matlab编程基础

    平台:Win7 64 bit,Matlab R2014a(8.3) “Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具.本文侧重于Matlab的编程 ...

  3. PID各环节的意义和功能,自带PID的matlab编程实例

    这是PID的标准形式包括比例/积分/微分三部分,e为偏差 下面我们分析三个环节的作用,设:当前系统状态A,目标状态B, e=B-A,初始状态e>0 (以下是个人的理解,欢迎读者评论) 1 比例环 ...

  4. 【Matlab编程】哈夫曼编码的Matlab实现

    在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章<哈夫曼树及编译码>.不过在通信仿真中,经常要使用到Matlab编程,所以为了方便起见,这里用Matlab实现的哈夫曼编码的功能.至于 ...

  5. matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)

    matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...

  6. 一些matlab教程资源收藏,使用matlab编程的人还是挺多的

    Matlab教程专题资源免费下载整理合集收藏 <MATLAB从入门到精通>高清文字版[PDF] 103.9MB 简体中文 <矩阵实验室>(Mathworks.Matlab.R2 ...

  7. 【python】实现一个python编程的小时钟!

    [本实验内容] 1.GUI.PyQT5介绍2.实现此次实验效果 [一 GUI.PyQt5介绍] 1.Python简介 2.GUI介绍 几个常用的Python GUI库: (1)wxPython (2) ...

  8. MATLAB编程技巧

    [摘要] MATLAB是一种科学计算语言,和C.Fortran等高级语言相类似,能方便的实现程序控制.以下介绍一点matlab编程的技巧. 嵌套计算 程序执行的速度取决于调用的子程序的个数和算法实现. ...

  9. 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者

    可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...

随机推荐

  1. Docker学习笔记1:CentOS7 下安装Docker

    本文内容摘自官网:https://docs.docker.com/engine/installation/linux/centos/#/create-a-docker-group 注:本文是介绍Lin ...

  2. Launcher3 HotSeat显示名称

    今天闲的无聊,研究了下launcher代码,看到Hotseat.java的时候,想起来以前有做过显示hotseat中应用名称,因为换了公司代码都没拿出来,就想在试着修改,看了很久发现无从下手,记得ho ...

  3. Scala:数组

    http://blog.csdn.net/pipisorry/article/details/52902432 ) 或var z = new Array[String](3) 以上语法中,z 声明一个 ...

  4. 剑指Offer——关于劳动合同,这6件事毕业生必须知道!

    剑指Offer--关于劳动合同,这6件事毕业生必须知道!   求职找工作,不少人拿到劳动合同的那刻,可能连合同内容都没看清,就挥着笔杆子"签签签".别急!劳动合同包含哪些条款你清楚 ...

  5. Python excel 奇怪的通信规则

    直接: for i in range(1,n+1): print(i) if xls.getCell(i,1,1)=='id': res=[] xls.xlBook.Worksheets(i).Nam ...

  6. JAVA面向对象-----包机制

    JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...

  7. Dynamics CRM2016 业务流程之Task Flow(二)

    接上篇,Page页设置完后,按照业务流程管理也可以继续设置Insert page after branch 或者 Add branch,我这里选择后者,并设置了条件,如果Pipeline Phase ...

  8. PyCharm 开发Django ,错误汇总

    近期略微接触了一下Django.在学习的过程中可谓是坎坎坷坷,遇到了很多的问题. 下面就来谈一谈我对Django的一点点的见解. Django项目的创建 使用PyCharm来开发Django项目是非常 ...

  9. UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

    前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...

  10. spark idea 的配置问题

    不知道下面的错误是为什么? Error:scalac: missing or invalid dependency detected while loading class file 'RDD.cla ...