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

- Rejestracja:prawie 13 lat
- Ostatnio:prawie 4 lata
- Lokalizacja:Bartoszyce
- Postów:180
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;
- Rejestracja:ponad 12 lat
- Ostatnio:prawie 11 lat
- Postów:104
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


