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:ponad 15 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
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)