歡迎您光臨本站 註冊首頁

Matlab及Java實現小時鐘效果

←手機掃碼閱讀     techdo @ 2020-06-05 , reply:0

本文實例為大家分享了Matlab及Java實現小時鐘的具體代碼,供大家參考,具體內容如下

一年前曾經用matlab的gui做了一個時鐘,由於是直接用GUIDE和ActiveX控件寫的,程序雖說有許多行,大多數都是自動生成的,自己寫的只有十幾行而已。閒著沒事,就耗費了下午的時間用matlab和Java分別又寫了寫。具體代碼如下:

1.matlab腳本文件:

  %%%%%%%%%%%%%%%設置圖像屬性並獲取圖像句柄%%%%%%%%%%%%%%%%%%%%%%%%%%%  h=figure('name','我的時鐘','NumberTitle','off','color',[1 1 0]);  set(h,'menubar','none','position',[200,200,400,450]);  %%%%%%%%%%%%畫出時鐘的外輪廓%%%%%%%%%%%%%%  s1=[0:pi/1000:2*pi];  hl=plot(2*cos(s1),2*sin(s1),'black','linewidth',1.5);  axis equal  title('我的時鐘');  hold on  %%%%%%%%%%%繪製錶盤刻度%%%%%%%%%%%%%%%%%%  for n=pi*2:-pi/30:pi/30       %繪製錶盤,繪製分鐘的刻度    a1=0.95*cos(n):0.000005*cos(n)/2:cos(n);b1=0.95*sin(n):0.000005*sin(n)/2:sin(n);    plot(2*a1,2*b1,'r-');  end  for n=pi*2:-pi/6:pi/30        %繪製錶盤,繪製小時的刻度    a1=0.9*cos(n):0.1*cos(n)/2:cos(n);b1=0.9*sin(n):0.1*sin(n)/2:sin(n);    plot(2*a1,2*b1,'r-');  end  text(1.5,0,'3','FontSize',12)  text(-0.05,-1.7,'6','FontSize',12)  text(-1.7,0,'9','FontSize',12)  text(-0.1,1.7,'12','FontSize',12)  %%%%%%%%%%%%%%%%獲取當前時間並進行角度與弧度轉換%%%%%%%%%%%%%%%%%%%%%%%%%%%%   axis([-2.1 2.1 -2.1 2.1])     time=datestr(now);    sec=pi/2-str2num(time(19:20))*pi/30;      min=pi/2-(str2num(time(16:17))+sec/60)*pi/30;                               hour=pi/2-(str2num(time(13:14))+min/60)*pi/6;    w1=-pi/30;    w2=-pi/1800;    w3=-pi/108000;    pausetime=1;   %%%%%%%%%%%%%%%%開始繪圖並不斷刷新%%%%%%%%%%%%  while 1    axis off      x1=0:0.75*cos(sec)/2:0.75*cos(sec);y1=0:0.75*sin(sec)/2:0.75*sin(sec); %根據秒針的位置繪製分針    x2=0:0.6*cos(min)/2:0.6*cos(min);y2=0:0.6*sin(min)/2:0.6*sin(min); %根據分針的位置繪製分針     x3=0:0.45*cos(hour)/2:0.45*cos(hour);y3=0:0.45*sin(hour)/2:0.45*sin(hour); %根據時針的位置繪製分針    hp1=plot(2*x1,2*y1,'r-','linewidth',1.5);    hp2=plot(2*x2,2*y2,'b-','linewidth',2);    hp3=plot(2*x3,2*y3,'g-','linewidth',3.5);    sec=sec+w1*pausetime;    %計算一秒以後秒針的角度位置    min=min+w2*pausetime;    %計算一秒以後分針的角度位置    hour=hour+w3*pausetime;    pause(1);    delete(hp1);    delete(hp2);    delete(hp3);  end

 

2.Java應用文件(文件名為MyClock.java)

  import java.awt.*;  import java.util.GregorianCalendar;  import javax.swing.*;  import javax.swing.Timer;  import java.util.*;  import java.awt.event.*;  public class MyClock extends JPanel   {      final double RAD=Math.PI/180;//角度與弧度的轉化         public void paint(Graphics g)   {   super.paint(g);//調用父類方法     Graphics2D g2=(Graphics2D)g;//主要用於改變線條粗細     int h=getSize().height;//獲取窗口的長和寬,主要用於當用鼠標改變窗口時,時鐘也跟著變化     int w=getSize().width;   int hour,min,sec,hh,mm,ss;   double x,y;   setBackground(Color.yellow);//設置背景值      g.setColor(Color.black);//畫筆顏色      int r=(Math.min(h, w)/2-50);      float x0=w/2;//時鐘中心位置      float y0=h/2;          g2.setFont(new Font("楷體",Font.PLAIN,20));      g2.drawString("我的時鐘",165, 50);      g2.setFont(new Font("Times New Roman",Font.PLAIN,20));      g2.drawString("Designed by TW",235, 420);            g.drawString("12",(int)(w/2)-5,(int)(h/2)-r+30);      g.drawString("3",(int)(w/2)-25+r,Math.round(h/2)+10);      g.drawString("6",(int)(w/2),(int)(h/2)+r-20);      g.drawString("9",(int)(w/2)-r+20,Math.round(h/2)+10);           //設置分鐘刻度 之所以沒有用線條,主要是因為drawline的參數要求是整數,因此刻度會不準確      for(int i=1;i<=12;i++)      {        double buffer=Math.PI*(0.5-i/6.0);        int posX = (int)Math.round(x0+r*Math.cos(buffer));        int posY = (int)Math.round(y0-r*Math.sin(buffer));        g.setColor(Color.red);        g.fill3DRect(posX, posY, 8, 8, true);        }      //設置秒鐘刻度            for(int i=1;i<60;i++)      {        if(i%5!=0)        {         double buffer= Math.PI*i/30.0;         int posX = (int)Math.round(x0+r*Math.cos(buffer));         int posY = (int)Math.round(y0-r*Math.sin(buffer));         g.setColor(Color.black);         g.fill3DRect(posX, posY, 6, 6, false);        }      }     //獲取當前系統時間          GregorianCalendar date=new GregorianCalendar();   hour=(int)date.get(Calendar.HOUR);    min=(int)date.get(Calendar.MINUTE);    sec=(int)date.get(Calendar.SECOND);    // System.out.println(hour);   // System.out.println(min);   // System.out.println(sec);   //進行角度換算   ss=90-sec*6;      mm=90-min*6;      hh=90-hour*30-min/2;      //畫出時分秒的指針       g2.setStroke(new BasicStroke(1.0f));      x=(int)(r*0.9*Math.cos(RAD*ss)+x0);      y=(int)(r*0.9*Math.sin(RAD*ss)+y0);      g.setColor(Color.red);      g.drawLine((int)(x0),(int)(y0),(int)x,(int)(h-y));         g2.setStroke(new BasicStroke(2.2f));      x=(int)(r*0.7*Math.cos(RAD*mm)+x0);      y=(int)(r*0.7*Math.sin(RAD*mm)+y0);      g.setColor(Color.blue);      g.drawLine((int)x0,(int)y0,(int)x,(int)(h-y));      g2.setStroke(new BasicStroke(3.4f));      x=(int)(r*0.5*Math.cos(RAD*hh))+x0;      y=(int)(r*0.5*Math.sin(RAD*hh))+y0;      g.setColor(Color.green);      g.drawLine((int)x0,(int)y0,(int)x,(int)(h-y));      }     //設置窗口大小   public Dimension getPreferredSize()   {   return new Dimension(400,450);   }  //    public static void main(String[] args)   {    Graphics g=null;    JFrame frame=new JFrame("我的時鐘");    Container contentPane=frame.getContentPane();    final MyClock tw=new MyClock();    contentPane.add(tw,BorderLayout.CENTER);    frame.pack();    frame.setVisible(true);    //用於畫板的刷新    int delay=1000;     //創建一個監聽事件     ActionListener drawClock=new ActionListener()     {       public void actionPerformed(ActionEvent evt)       {        tw.repaint();       }     };          //創建一個時間計數器,每一秒觸發一次     new Timer(delay,drawClock).start();       }  }

 

運行結果如下圖:

1.matlab時鐘界面:

2.Java時鐘界面

                                                       

   


[techdo ] Matlab及Java實現小時鐘效果已經有538次圍觀

http://coctec.com/docs/java/show-post-237058.html