Java. Wykład 9. Piotr Tronczyk

Podobne dokumenty
Grafika i komunikacja człowiek komputer Laboratorium. Część 2: Graphics

Grafika i komunikacja człowiek komputer Laboratorium. Część 3: Tekst, czcionki, kolory

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Grafika Komputerowa Materiały Laboratoryjne

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

Tworzenie elementów graficznych

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Laboratorium z informatyki sem. III/ćw. 2 Wydział Transportu PW /19 MATERIAŁY POMOCNICZE DO ĆWICZENIA 2

Microsoft Small Basic

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Laboratorium z informatyki sem.iii/ćw. 4 Wydział Transportu PW /19

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

STWORZENIE PRZYKŁADOWEJ

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Spis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Szybkie tworzenie grafiki w GcIde

O czym należy pamiętać?

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Obsługa programu Paint. mgr Katarzyna Paliwoda

INSTRUKCJA OBSŁUGI ZEGARKA ANALOGOWEGO

Programowanie obiektowe

PROGRAMOWANIE GRAFIKI I ELEMENTÓW INTERAKTYWNYCH NA STRONY WWW W P5.JS

Programowanie strukturalne i obiektowe. Funkcje

Języki formalne i automaty Ćwiczenia 5

Interfejsy i klasy wewnętrzne

Matematyka A kolokwium 26 kwietnia 2017 r., godz. 18:05 20:00. i = = i. +i sin ) = 1024(cos 5π+i sin 5π) =

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

Opis implementacji: Poznanie zasad tworzenia programów komputerowych za pomocą instrukcji języka programowania.

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8

Rysowanie punktów na powierzchni graficznej

WIZUALIZER 3D APLIKACJA DOBORU KOSTKI BRUKOWEJ. Instrukcja obsługi aplikacji

Kurs programowania 2 - listy

WIZUALIZER 3D APLIKACJA DOBORU KOSTKI BRUKOWEJ. Instrukcja obsługi aplikacji

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny

Programowanie - wykład 4

III Powiatowy Konkurs Matematyka, Fizyka i Informatyka w Technice Etap finałowy 19 marca 2015

Bryła obrotowa, szyk kołowy, szyk liniowy

Język Java część 2 (przykładowa aplikacja)

INSTRUKCJA DO ĆWICZENIA 5

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

LUBELSKA PRÓBA PRZED MATURĄ POZIOM PODSTAWOWY Klasa 2 Klasa 2

4. W konstruktorze klasy Grafika wywołaj metodę określającą rozmiary ramki oraz ustaw kolor tła metodą setbackground():

PWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub

Dziedziczenie. Zadanie 1

KONKURS PRZEDMIOTOWY Z MATEMATYKI dla uczniów szkół podstawowych 24 stycznia 2015 r. zawody II stopnia (rejonowe)

Polcode Code Contest PHP-10.09

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

EGZAMIN MATURALNY Z MATEMATYKI

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

MECHANIKA 2 RUCH POSTĘPOWY I OBROTOWY CIAŁA SZTYWNEGO. Wykład Nr 2. Prowadzący: dr Krzysztof Polko

WIELOKĄTY FOREMNE I ICH PRZEKĄTNE

ALGORYTMY I STRUKTURY DANYCH

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Rysowanie Części 2D. Lekcja Druga. Podczas tej lekcji przyjrzymy się jak wykonać poniższy rysunek przy pomocy programu BobCAD-CAM.

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

INSTRUKCJA OBSŁUGI ZEGARKA ANALOGOWEGO

TRYGONOMETRIA FUNKCJE TRYGONOMETRYCZNE KĄTA SKIEROWANEGO

Rys. 1. Rozpoczynamy rysunek pojedynczej części

Simba 3D LOGO. Cele zajęć: - Poznanie zasad i sposobów tworzenia procedur z parametrami. - Poznanie zasad wywoływania procedur z parametrami.

Definiowanie procedur z parametrami w Logo Komeniuszu.

Rysowanie precyzyjne. Polecenie:

W module Część-ISO wykonać kubek jak poniżej

Visual Studio instalacja

Aplikacje w środowisku Java

Badanie ruchu złożenia

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

ODPOWIEDZI I SCHEMAT PUNKTOWANIA ZESTAW NR 2 POZIOM PODSTAWOWY. Etapy rozwiązania zadania

Klasy abstrakcyjne i interfejsy

Prostokąt. AutoCAD pozwala na szybkie rysowanie figur o czterech bokach prostokątów. Do tego celu służy funkcja Prostokąt. Funkcję tą można wywołać:

Język Java. Rysowanie GUI Określanie wyglądu komponentów

Wprowadzenie do języka Java

Tworzenie logo. Omówione zagadnienia

Następnie należy wybrać wzór świadectwa Ministerstwa Edukacji Narodowej, z jakiego szkoła będzie korzystać.

Programowanie obiektowe - zadania

IX. Wskaźniki.(3 godz.)

AUTOCAD MIERZENIE I PODZIAŁ

Kurs WWW. Paweł Rajba.

Programowanie: grafika w SciLab Slajd 1. Programowanie: grafika w SciLab

KONKURS MATEMATYCZNY

Baltie 2010 etap szkolny, zadania dla kategorie A, B

LABORATORIUM 7 Cel: 1_1

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Przewodnik po obszarze roboczym

2 Przygotował: mgr inż. Maciej Lasota

Pozycja nr 2 ustawienie czasu: przekręć koronkę w dowolnym kierunku aby ustawić aktualny czas.

Tydzień nr 9-10 (16 maja - 29 maja), Równania różniczkowe, wartości własne, funkcja wykładnicza od operatora - Matematyka II 2010/2011L

VII. WYKRESY Wprowadzenie

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Transkrypt:

Java Wykład 9 Piotr Tronczyk

Zegar analogowy Tarcza Cyferblat Wskazówki Timer 2

Zegar analogowy Tym razem postaramy się napisać program, który wyświetlał będzie zegar analogowy. Część odpowiedzialna za pobieranie daty oraz godziny, będzie identyczna jak w przypadku zegara cyfrowego jednak istotna różnicą będzie sposób wyświetlania i malowania zegara. 3

Zegar analogowy 4

Zegar analogowy Najpierw napiszemy kod odpowiedzialny za malowanie tarczy zegara w postaci metody DrawClock i umieścimy jej wywołanie w obsłudze zdarzenia paintcomponent. narysowanie tarczy zegara sprowadzi się do narysowania dwóch elips jednej wypełnionej kolorem, drugiej w postaci konturu jak obwódki. Do rysowania elips posłużymy się metodami filloval drawoval 5

Zegar analogowy public void paintcomponent(graphics g) { setbackground(new Color(0f,1f,0f,0.5f)); Graphics2D g2d = (Graphics2D) g; g2d.setcolor(color.blue); Dimension size = getsize(); int width = size.width; int height = size.height; g2d.setcolor(color.lightgray); g2d.filloval(10,10,width-20,height-20); g2d.setstroke(new BasicStroke(3)); g2d.setcolor(color.blue); g2d.drawoval(10,10,width-20,height-20); 6

Godziny Kolejnym krokiem będzie namalowanie na tarczy zegara liczb reprezentujących godziny, najpierw jednak troche powtórki z matematyki. 7

Godziny Tarcza naszego zegara jest elipsą, matematycznie elisą możemy opisać następującym równaniem: x a 2 2 b y 2 2 1 8

Godziny Współrzędne punktu na obwodzie elipsy możemy więc wyznaczyć w następujący sposób: x a cos( ) y b sin( ) 0 2 9

Godziny Układ współrzędnych związany z oknem aplikacji ma punkt (0,0) w górnym lewym narożniku okna, wartości x rosną w prawo, natomiast y do dołu. 10

Godziny Godziny na tarczy zostaną wyświetlone przy użyciu metody drawstring, ponieważ napis wyświetlamy poprzez zdefiniowanie prostokąta otaczającego musimy wyznaczyć jego współrzędne, szerokość oraz wysokość. Szerokość oraz wysokość zależy od czcionki jaką wyświetlamy napis, musimy więc dowiedzieć się ile miejsca zajmie dany napis wyświetlony wybraną czcionką 11

Godziny Klasa FontMetrics umożliwi na pobranie wymaganych informacji: FontMetrics fm =g2d.getfontmetrics(this.getfont()); String s = Napis testowy ; int ws=fm.stringwidth(s); int wh = fm.getascent(); x=x-ws/2; y=y+wh/2; g2d.drawstring(s,x,y); 12

Godziny Wyznaczając współrzędne x, y prostokątów otaczających napisy, przyjmiemy, że cyferblat zegara będzie rozmieszczony na okręgu o promieniu mniejszym niż promień tarczy zegara. 13

Godziny Ponieważ układ współrzędnych związany z oknem wygląda tak, że współrzędne y rosną w dół okna, kąty wyznaczamy w następujący sposób: 14

Godziny Na tarczy mamy 12 godzin, pełny kąt wynosi 360 stopni, tak więc kolejne godziny rozmieszczone są na tarczy co 30 stopni. Rysowanie godzin wykonamy w pętli od godziny 1 do 12. Godzina pierwsza startuje od kąta 60 stopni. 15

Godziny float ang = -60.0f; for (int i=1; i<=12; i++){ String ss=string.format("%d",i); x = (float) ((r1)*math.cos(ang*math.pi/180.0f)); y = (float) ((r2)*math.sin(ang*math.pi/180.0f)); x+=midx; y+=midy; int ws=fm.stringwidth(ss); int wh = fm.getascent(); x=x-ws/2; y=y+wh/2; g2d.drawstring(ss,x,y); ang += 30.0f; 16

Godziny Po wykonaniu kodu dostaniemy liczby rozmieszczone na tarczy zegara 17

Wskazówki Ostatnim krokiem jest namalowanie wskazówek sekundnika, minut, oraz godzin. Możemy malować je w sposób podobny do tego jaki został użyty przy malowaniu godzin. 18

Wskazówki Zacznijmy najpierw od sekundnika, ponieważ pełen obieg wskazówki sekundnika oznacza upływ minuty, sekunda jest 1/60 częścią minuty, wskazówka sekundnika, będzie malowana w 60 różnych położeniach, stopień o jaki należy ją obrócić po upływie sekundy to 360/60=6. 19

Wskazówki Współrzędne końca wskazówki możemy wyznaczyć na więcej niż jeden sposób. Jeżeli przyjmiemy, że będziemy obracali je względem punktu znajdującego się w środku tarczy 20

Wskazówki Współrzędne po obrocie wyznaczymy: x ' x cos( ) y sin( ) y ' x sin( ) y cos( ) 21

Wskazówki Możemy zapisać te wyrażenia w postaci następującego równania macierzowego: p ' Mp 22

Wskazówki Gdzie macierz M wygląda następująco: M cos( sin( ) ) sin( cos( ) ) 23

Wskazówki Oczywiście możemy uprościć sobie obliczenia przyjmując, że obracamy punkt względem środka układu współrzędnych, należy wtedy pamiętać, że po obrocie należy zmodyfikować otrzymane współrzędne, czyli dokonać translacji punktu 24

Wskazówki Wskazówka minutowa zostanie narysowana w podobny sposób jak sekundowa. Należy jednak pamiętać, że na kąt wychylenia wskazówki minutowej ma również wpływ liczba sekund jaka upłynęła w bieżącej minucie, 30 sekund do pół minuty, ponieważ w godzinie mamy 60 minut wskazówka minutowa po upływie pełnej minuty obróci się o 6 stopni. float mang = 6.0f*(min+sec/60.0f)-90.0f; 25

Wskazówki Ostatnim krokiem jest namalowanie wskazówki godzinowej Pełen obieg tarczy przez wskazówkę godzinową to 12 godzin, czyli kąt obrotu wskazówki wynosi w tym przypadku 360/12=30 Należy oczywiście uwzględnić liczbę minut, która upłynęła w bieżącej godzinie: float hang = 30.0f*(ho+min/60.0f)-90.0f; 26

Wskazówki Wskazówki będą różniły się nie tylko długością, ale też grubością. Aby wybrać grubość linii użyjemy następującego kodu: g2d.setstroke(new BasicStroke(3)); BasicStrike jest klasą reprezentującą linię ciągłą o zadanej grubości. 27

Timer Bieżącą godzinę będziemy pobierali w metodzie actionperformed klasy Timer javax.swing.timer t = new javax.swing.timer(1000, new ActionListener() { public void actionperformed(actionevent e) {... } 28

Koniec 29