Animowany zegar w Javie

0

Witam pisze na forum bo szukalem w necie i nic sensownego nie znalazłem. Jedynie ktoś gdzieś pisał o równaniu parametrycznym okręgu jednak nie wiem jak mógłbym je zastosować do zrobienia zegara wiec prosze o pomoc. Mianowicie chcialbym zrobic animowany zegar. Nie wiem tylko jak przesuwac wskazowki. Kat obrotu wskazowki minutowej to 6 stopni ale jak z tego wyliczyc punkt do narysowania Lini2D? Zapewne cos z funkcji trygonometrycznych ale myslalem wczoraj i nic nie wymyslilem. Prosze o wyjasnienie w miare prostym jezykiem. A jak komus sie chce to rowniez o jakas nieskomplikowana implementacje (nalepiej w Javie ale nie koniecznie)

0

Masz w prezencie noworocznym aplet - zegar tarczowy.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class ZegarAnalogowy extends JApplet
{
    public void init()
    {
        setSize(400,400);
        setName("Zegar analogowy");
        javax.swing.Timer timer = new javax.swing.Timer(0,new ZegarTask());
        timer.setDelay(1000);
        timer.start();        
    }
    //---------------------------
    public void paint(Graphics g)
    {
        g.setColor(new Color(208,207,232));
        g.fillRect(0,0,400,400);
        g.setColor(new Color(208,207,204));
        g.fillOval(0,0,400,400);
        g.setColor(Color.red);
        double angle;
        int x1,y1,x2,y2;
        for(int i=0;i<12;i++)
        {
            angle = 2*Math.PI*(i/12.0);
            x1 = (int)(200*Math.cos(angle))+200;
            y1 = (int)(200*Math.sin(angle))+200;
            x2 = (int)(180*Math.cos(angle))+200;
            y2 = (int)(180*Math.sin(angle))+200;
            g.drawLine(x1,y1,x2,y2);
        }
        for(int i=0;i<60;i++)
        {
            angle = 2*Math.PI*(i/60.0);
            x1 = (int)(200*Math.cos(angle))+200;
            y1 = (int)(200*Math.sin(angle))+200;
            x2 = (int)(190*Math.cos(angle))+200;
            y2 = (int)(190*Math.sin(angle))+200;
            g.drawLine(x1,y1,x2,y2);
        }
        GregorianCalendar date = new GregorianCalendar();
        int hours = date.get(Calendar.HOUR_OF_DAY)%12;
        int minutes = date.get(Calendar.MINUTE);
        int seconds = date.get(Calendar.SECOND);
        angle = 2*Math.PI*(seconds/60.0)-(Math.PI/2);
        x1 = (int)(160*Math.cos(angle));
        y1 = (int)(160*Math.sin(angle));
        g.drawLine(200,200,200+x1,200+y1);
        angle = 2*Math.PI*((minutes*60+seconds)/3600.0)-(Math.PI/2);
        x1 = (int)(140*Math.cos(angle));
        y1 = (int)(140*Math.sin(angle));
        g.drawLine(200,200,200+x1,200+y1);
        angle = 2*Math.PI*((hours*60*60+minutes*60+seconds)/43200.0)-(Math.PI/2);
        x1 = (int)(120*Math.cos(angle));
        y1 = (int)(120*Math.sin(angle));
        g.drawLine(200,200,200+x1,200+y1);
    }
    //------------------------
    class ZegarTask implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            repaint();
        }
    }    
}
0

Dzieki ale gotowe kody tez znalazłem (np. tutaj http://www.c-sharpcorner.com/UploadFile/433c33/creating-analog-clock-in-java/). Mi chodzi o to ze chcialbym wiedziec jak wyliczyc to połozenie wskazówek. Z czego wynika ten wzór

0
michat34 napisał(a):

Dzieki ale gotowe kody tez znalazłem (np. tutaj http://www.c-sharpcorner.com/UploadFile/433c33/creating-analog-clock-in-java/). Mi chodzi o to ze chcialbym wiedziec jak wyliczyc to połozenie wskazówek. Z czego wynika ten wzór

no przecież jest podane :

x1 = (int)(200*Math.cos(angle))+200;
            y1 = (int)(200*Math.sin(angle))+200;
            x2 = (int)(180*Math.cos(angle))+200;
            y2 = (int)(180*Math.sin(angle))+200; 
0

Okej moze dla was to jest takie oczywiste ale dla mnie niestety nie, wiec moglbym prosic o wytlumaczenie z czego wynika ten wzor?

0

Naprawdę próbowałeś przez cały dzień rozwiązać ten 'problem' z wykorzystaniem f. trygonometrycznych? Przecież te wzory wynikają wprost z definicji sinusa i cosinusa.

0

Zadziwie Cie ale jestem w 3gim i ani razu nikt tutaj nie wspomnial o funkcjach trygonomterycznych takze dla mnie nie jest to takie oczywiste. W kazdym razie zaraz poczytam o nich i sprobuje to wyliczyc jeszcze raz skoro mowicie ze mozna bez problemu to zrobic z sinusa i cosinusa. Prosze na razie nie zamykac tematu
EDIT:
Udalo sie dzieki za pomoc ;) Mozna zamknac

1 użytkowników online, w tym zalogowanych: 0, gości: 1