Animowany zegar w Javie

Animowany zegar w Javie
M3
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:104
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)

edytowany 1x, ostatnio: michat34
0

Masz w prezencie noworocznym aplet - zegar tarczowy.

Kopiuj
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();
        }
    }    
}
M3
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:104
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

edytowany 1x, ostatnio: michat34
wedlock
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Bartoszyce
  • Postów:180
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 :

Kopiuj
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; 
M3
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:104
0

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

airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
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.

edytowany 1x, ostatnio: airborn
M3
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:104
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

edytowany 1x, ostatnio: michat34
wedlock
A to pojechałem. Ja miałem trygonometrię w 7 lub 8 klasie szkoły podstawowej :) Stary jestem !
A7
Nie tylko Ty. Wychodzi, że aktualnie człowiek mając około 15 lat jest za głupi na to, żeby go uczyć funkcji trygonometrycznych.
wedlock
Pamiętam jak w czasach C64 samemu w assemblerze robiło się funkcje trygonometryczne żeby obracać cube w 3d + perspektywę i zasłanianie niewidocznych ścian.
A7
Zaraz chyba pójdę na strych i wyciągnę swojego Commodore i go odkurzę.
wedlock
Ja też nadal mam z ramcartem 128kB i assemblerem do niego przerobionym żeby całe 64kb w komciu było dla kodu:) Offtop sobie tu urządzomy

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.