Przykład implementacji przeciażeń operatorów problem kolizji



Podobne dokumenty
Wprowadzenie do UML, przykład użycia kolizja

Diagramy UML, przykład problemu kolizji

Wartości domyślne, szablony funkcji i klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Szablony funkcji i szablony klas

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Wyznaczanie statycznego i kinetycznego współczynnika tarcia przy pomocy równi pochyłej

Szablon klasy std::list

Ćwiczenie: "Ruch harmoniczny i fale"

Ćwiczenia IV - Kontenery (pojemniki)

Wartości domyślne, przeciażenia funkcji

Szablon klasy std::vector

Pola i metody statyczne

Wartości domyślne, przeciażenia funkcji

PAKIET MathCad - Część III

14P2 POWTÓRKA FIKCYJNY EGZAMIN MATURALNYZ FIZYKI I ASTRONOMII - II POZIOM PODSTAWOWY

Klasa, metody, rozwijanie w linii

NUMER IDENTYFIKATORA:

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Optyka geometryczna i falowa

Wprowadzenie do szablonów klas

dyfuzja w płynie nieruchomym (lub w ruchu laminarnym) prowadzi do wzrostu chmury zanieczyszczenia

Przykład zastosowania przeciażeń operatorów i metod stałych - szukanie punktu przecięcia z wielobokiem

Programowanie 2. Język C++. Wykład 2.

Referencje do zmiennych i obiektów

KURS GEOMETRIA ANALITYCZNA

Klasa, metody, rozwijanie w linii

1) TUnŻ WARTA S.A. i TUiR WARTA S.A. należą do tej samej grupy kapitałowej,

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Kurs wyrównawczy dla kandydatów i studentów UTP

P 0max. P max. = P max = 0; 9 20 = 18 W. U 2 0max. U 0max = q P 0max = p 18 2 = 6 V. D = T = U 0 = D E ; = 6

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

PL B1. POLITECHNIKA POZNAŃSKA, Poznań, PL BUP 01/11. RAFAŁ TALAR, Kościan, PL WUP 12/13

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Programowanie obiektowe w C++ Wykład 11

Kurs z matematyki - zadania

Analiza wyników egzaminu gimnazjalnego. Test matematyczno-przyrodniczy matematyka. Test GM-M1-122,

Programowanie obrabiarek CNC. Nr H8

Standardowe tolerancje wymiarowe

'()(*+,-./01(23/*4*567/8/23/*98:)2(!."/+)012+3$%-4#"4"$5012#-4#"4-6017%*,4.!"#$!"#%&"!!!"#$%&"#'()%*+,-+

MATERIAŁY DIAGNOSTYCZNE Z MATEMATYKI

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

Wyliczanie wyrażenia obiekty tymczasowe

Spis treści Wykład 3. Modelowanie fal. Równanie sine-gordona

Grafika inżynierska geometria wykreślna

SPRAWDZIANY Z MATEMATYKI

BADANIE UMIEJĘTNOŚCI UCZNIÓW W TRZECIEJ KLASIE GIMNAZJUM CZĘŚĆ MATEMATYCZNO-PRZYRODNICZA

Lista dwukierunkowa - przykład implementacji destruktorów

Warunki Oferty PrOmOcyjnej usługi z ulgą

Rzutowanie i konwersje

Qt po polsku. Bogdan Kreczmer.

Cel i zakres ćwiczenia

Materiały pomocnicze 8 do zajęć wyrównawczych z Fizyki dla Inżynierii i Gospodarki Wodnej

SZCZEGÓŁOWY OPIS PRZEDMIOTU ZAMÓWIENIA

Konstruktor kopiujacy

Operacje wejścia/wyjścia odsłona pierwsza

ASD - ćwiczenia III. Dowodzenie poprawności programów iteracyjnych. Nieformalnie o poprawności programów:

PRZEDMIOTOWY SYSTEM OCENIANIA Z MATEMATYKI DLA KLAS IV VI

Arkusz maturalny treningowy nr 7. W zadaniach 1. do 20. wybierz i zaznacz na karcie odpowiedzi poprawną odpowiedź.

Operacje wejścia/wyjścia (odsłona druga) - pliki

EGZAMIN MATURALNY Z MATEMATYKI

Funkcje składowe (metody)


Konspekt lekcji otwartej

Objaśnienia wartości, przyjętych do Projektu Wieloletniej Prognozy Finansowej Gminy Golina na lata

Wojewódzki Konkurs Przedmiotowy z Matematyki dla uczniów gimnazjów województwa śląskiego w roku szkolnym 2012/2013

Kalendarz Maturzysty 2010/11 Fizyka

SERI A 93 S E RI A 93 O FLUSH GRID WITHOUT EDGE TAB

Podstawy programowania

Czy zdążyłbyś w czasie, w jakim potrzebuje światło słoneczne, aby dotrzeć do Saturna, oglądnąć polski hit kinowy: Nad życie Anny Pluteckiej-Mesjasz?

Wykład 10. Urządzenia energoelektroniczne poprzez regulację napięcia, prądu i częstotliwości umoŝliwiają

Elementy animacji sterowanie manipulatorem

10 RUCH JEDNOSTAJNY PO OKRĘGU

EGZAMIN MATURALNY Z MATEMATYKI

ODPOWIEDZI I SCHEMAT PUNKTOWANIA ZESTAW NR 2 POZIOM ROZSZERZONY. S x 3x y. 1.5 Podanie odpowiedzi: Poszukiwane liczby to : 2, 6, 5.

2.Prawo zachowania masy

- Miejscowość Kod pocztowy Nr posesji Ulica Gmina

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

D wysokościowych

ostatni dzień miesiąca (yyyy-mm-dd) miejsce zam. - ulica nr miejscowość wypełnienia oświadczenia

BLOK I. 3. Korzystając z definicji pochodnej w punkcie, obliczyć pochodne podanych funkcji we wskazanych punktach:

Zastosowanie metod statystycznych do problemu ujednoznaczniania struktury zdania w języku polskim

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

1. MONITOR. a) UNIKAJ! b) WYSOKOŚĆ LINII OCZU

TABELA ZGODNOŚCI. W aktualnym stanie prawnym pracodawca, który przez okres 36 miesięcy zatrudni osoby. l. Pornoc na rekompensatę dodatkowych

Soczewkowanie grawitacyjne 3

ST SPECYFIKACJA TECHNICZNA ROBOTY GEODEZYJNE. Specyfikacje techniczne ST Roboty geodezyjne

Strategia rozwoju sieci dróg rowerowych w Łodzi w latach

Niniejszy ebook jest własnością prywatną.

Urządzenie do odprowadzania spalin

Numer obszaru: 8 E-learning w szkole - wykorzystanie platform edukacyjnych w pracy szkoły

Programowanie 2. Język C++. Wykład 3.

Praca na wielu bazach danych część 2. (Wersja 8.1)

INSTRUKCJA Projektowanie plików naświetleń (rozkładówek + rozbiegówek) oraz pliku okładki dla albumu z okładką personalizowaną.

Technikum w ZSP Żelechów ponownie najlepsze

for (i=1; i<=10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Transkrypt:

Przykład implementacji przeciażeń operatorów problem kolizji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Opis problemu: Zaimplementować procedurę obliczeniowa umożliwiajac a stwierdzenie, czy dla dwóch platform mobilnych poruszajacych się wzdłuż prostej ruchem jednostajnym zachodzi kolizja. Zakładamy, że kolizja zachodzi jeśli jakaś przeszkoda znajdzie się w obrębie okręgu opisanego na rzucie pionowym korpusu platformy. Platforma mobilna 1 Platforma mobilna 2 1

Analiza problemu Zaimplementować procedurę obliczeniowa umożliwiajac a stwierdzenie, czy dla dwóch platform mobilnych poruszajacych się wzdłuż prostej ruchem jednostajnym zachodzi kolizja. Zakładamy, że kolizja zachodzi jeśli jakaś przeszkoda znajdzie się w obrębie okręgu opisanego na rzucie pionowym korpusu platformy. Kluczowe rzeczowniki: platforma ( mobilna ) Własności: ruch położenie rozmiar Relacje: kolizyjność 2

Rozwiazanie w globalnym układzie współrzędnych Rozwiazaniem problemu jest wyznaczenie najmniejszej odległości na jaka zbliża się do siebie platformy. Kolizja nie nastapi jeżeli odległość ta będzie większa niż suma promieni okręgów opisanych na korpusach obu platform. d(t) = (x 1 x 2 ) 2 +(y 1 y 2 ) 2 x1 (t) = v x,1 t + x 0,1 y 1 (t) = v y,1 t + y 0,1 x2 (t) = v x,2 t + x 0,2 y 2 (t) = v y,2 t + y 0,2 d(t) = ((v x,1 v x,2 )t +(x 0,1 x 0,2 )) 2 +((v y,1 v y,2 )t +(y 0,1 y 0,2 )) 2 3

Rozwiazanie w globalnym układzie współrzędnych d(t) = ((v x,1 v x,2 )t +(x 0,1 x 0,2 )) 2 +((v y,1 v y,2 )t +(y 0,1 y 0,2 )) 2 d(t) = (v x,12 t + x 0,12 ) 2 +(v y,12 t + y 0,12 ) 2 gdzie v x,12 = v x,1 v x,2 analogicznie x 0,12,v y,12,y 0,12. Szukamy wartość t, dla której funkcja d(.) osiaga minimum: dd(t) dt = 0 v x,12 (v x,12 t + x 0,12 )+v y,12 (v y,12 t + y 0,12 ) = 0 t = v x,12x 0,12 + v y,12 y 0,12 v 2 x,12 + v2 y,12 4

Rozwiazanie w lokalnym układzie współrzędnych Transformacja do lokalnego układu współrzędnych platformy nr 2 zwiazanego ze środkiem okręgu opisanego na obrysie jej korpusu. xl (t) = x 1 (t) x 2 (t) y L (t) = y 1 (t) y 2 (t) vx,l (t) = v x,1 (t) v x,2 (t) v y,l (t) = v y,1 (t) v y,2 (t) Dzięki zastosowanej transformacji rozwiazanie problemu znacznie się upraszcza. trzeba liczyć pochodnej, gdyż w tym przypadku problem jest natury geometrycznej. Nie 5

Rozwiazanie w lokalnym układzie współrzędnych W lokalnym układzie współrzędnych jednej z platform problem sprowadza się do wyznaczenia odległości prostej od poczatku układu współrzędnych. e V V L e r α r d d = r sinα d = r sinα = r(e r e V ) = (r e V ) z = (r V L V L ) z = (r V L) z V L 6

d = (r V L) z V L 7

Rozwiazanie w lokalnym układzie współrzędnych W lokalnym układzie współrzędnych jednej z platform problem sprowadza się do wyznaczenia odległości prostej od poczatku układu współrzędnych. e V V L e r α r d d = r sinα Kolizja zachodzi gdy: 8

(r V L ) z V L < R 1 + R 2 9

float Vx1, Vy1, Px1, Py1, R1; float Vx2, Vy2, Px2, Py2, R2;... Implementacja w C (beznadziejna!!!) int CzyKolizja() float Vx, Vy, Px, Py; /.................... Stan platformy nr 2 w układzie lokalnym platformy nr 1 / float d; /....................................... Obliczana odległość minięcia się platformy nr 1 i 2 / Vx = Vx1 - Vx2; /............. Obliczanie prędkości platformy nr 2 w układzie lokalnym platformy nr 1 / Vy = Vy1 - Vy2; Px = Px1 - Px2; /............. Obliczanie położenia platformy nr 2 w układzie lokalnym platformy nr 1 / Py = Py1 - Py2; d = fabs(px Vy - Py Vx)/sqrt(Vx Vx+Vy Vy); /............... Obliczanie odległości minięcia się / return d < R1+R2; } Stosowanie zmiennych globalnym w tym przypadku nie jest uzasadnione. 10

Implementacja w C (Sposób zdecydowanie lepszy) / Vx1, Vy1, Px1, Py1 prędkość i położenie platformy nr 1, R1 promień okręgu obrysowujacego pionowy rzut korpusu platformy, Vx2, Vy2, Px2, Py2 prędkość i położenie platformy nr 2, R2 promień okręgu obrysowujacego pionowy rzut korpusu platformy, / int CzyKolizja( float Vx1, float Vy1, float Px1, float Py1, float R1, float Vx2, float Vy2, float Px2, float Py2, float R2 ) float Vx, Vy, Px, Py, /..................... Stan platformy nr 2 w układzie lokalnym platformy nr 1 / float d; /.........................................Obliczana odległość minięcia się platformy nr 1 i 2 / Vx = Vx1 - Vx2; /............. Obliczanie prędkości platformy nr 2 w układzie lokalnym platformy nr 1 / Vy = Vy1 - Vy2; Px = Px1 - Px2; /............. Obliczanie położenia platformy nr 2 w układzie lokalnym platformy nr 1 / Py = Py1 - Py2; d = fabs(px Vy - Py Vx)/sqrt(Vx Vx+Vy Vy); /................ Obliczenie Odległości minięcia się / } return d < R1+R2; 11

Implementacja w C (Sposób obiektowo zorientowany) typedef struct Wektor float x, y; } Wektor; typedef struct PlatformaMobilna Wektor Pos; /........................................ Położenie platformy / Wektor V; /.................................. Wektor prędkości platformy / float R; /.............. Promień obrysu pionowego rzutu korpusu platformy / } PlatformaMobilna; 12

Implementacja w C (Sposób obiektowo zorientowany) int CzyKolizja( PlatformaMobilna PM1, PlatformaMobilna PM2 ) Wektor V, P; /................................ Stan platformy nr 2 w układzie lokalnym platformy nr 1 / float d; /....................................Obliczana odległość minięcia się platformy nr 1 i 2 / V.x = PM1.Vel.x - PM2.Vel.x; /.. Obliczanie prędkości platformy nr 2 w układzie lokalnym platformy nr 1 / V.y = PM1.Vel.y - PM2.Vel.y; P.x = PM1.Pos.x - PM2.Pos.x; / Obliczanie położenia platformy nr 2 w układzie lokalnym platformy nr 1 / P.y = PM1.Pos.y - PM2.Pos.y; d = fabs(p.x V.y - P.y V.x)/sqrt(V.x V.x+V.y V.y); /.............. Obliczenie Odległości minięcia się / return } d < PM1.R+PM2.R; 13

Implementacja w C++ (bez operatorów) class Wektor //........................................................................... public: float x, y; Wektor Odejmij(Wektor) const; float IloczynWekZ(const Wektor & V) const return x V. y y V. x; } float IloczynSkal(const Wektor & V) const return x V. x + y V. y; } }; //......................................................................................... class PlatformaMobilna //................................................................ public: Wektor Pozycja; Wektor WPredkosci; float R; bool CzyKolizja( const PlatformaMobilna & V) const; }; //......................................................................................... 14

Implementacja w C++ (bez operatorów) Wektor Wektor::Odejmij( Wektor W ) const W. x = x W. x; W. y = y W. y; return W; } bool PlatformaMobilna::CzyKolizja( const PlatformaMobilna & PM ) const Wektor V d = PM. WPredkosci.Odejmij( WPredkosci); Wektor P d = PM. Pozycja.Odejmij( Pozycja); float d = fabs(p d.iloczynwektz(v))/sqrt(v.iloczynskal(v)); return d < PM. R+ R; } 15

Implementacja w C++ class Wektor //................................................................... public: float x, y; Wektor operator (Wektor) const; float operator (const Wektor & V) const return x V. y y V. x; } float operator & (const Wektor & V) const return x V. x + y V. y; } }; //................................................................................. class PlatformaMobilna //........................................................ public: Wektor Pozycja; Wektor WPredkosci; float R; bool CzyKolizja( const PlatformaMobilna & PM) const; }; //................................................................................. 16

Implementacja w C++ Wektor Wektor::operator ( Wektor W ) const W. x = x W. x; W. y = y W. y; return W; } bool PlatformaMobilna::CzyKolizja( const PlatformaMobilna & PM ) const Wektor V = PM. WPredkosci WPredkosci; Wektor r = PM. Pozycja Pozycja; return fabs(r V)/sqrt(V & V) < PM. R+ R; } (r V L ) z V L < R 1 + R 2 17

Implementacja w C++ Wektor Wektor::operator ( Wektor W ) const W. x = x W. x; W. y = y W. y; return W; } bool PlatformaMobilna::CzyKolizja( const PlatformaMobilna & PM ) const Wektor V = PM. WPredkosci WPredkosci; return fabs((pm. Pozycja Pozycja) V)/sqrt(V & V) < PM. R+ R; } (r V L ) z V L < R 1 + R 2 18

Diagramy klas w UML Rysunek 1: Diagram klas dla problemu wykrywania kolizji. 19

1. Dany jest definicja klasy Wektor: struct Wektor float x, y; Pytania i ćwiczenia Wektor operator ( Wektor W ) W. x = x W. x; W. y = y W. y; return W; } float operator (Wektor V) return x V. y y V. x; } float operator & (Wektor V) return x V. x + y V. y; } }; (a) Czy dla powyższej definicji poprawny jest poniższy zapis? Jeżeli tak, to jaki będzie wynik? Jeżeli nie, to co trzeba zrobić aby zapis ten był poprawny? Wektor W; W. x = W. y = 1; cout << (W & W W); (b) Czy dla powyższej definicji poprawny jest poniższy zapis? Jeżeli tak, to jaki będzie wynik? Jeżeli nie, to co trzeba zrobić aby zapis ten był poprawny? Wektor W; W. x = W. y = 1; cout << (W & W W W); 20