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

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

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

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

Zad. 6: Sterowanie robotem mobilnym

Zad. 5: Sterowanie robotem mobilnym

Zad. 5: Sterowanie dronem

Zad. 3: Układ równań liniowych

Zad. 7: Fabryka obiektów i singleton

Zad. 7: Fabryka obiektów i singleton

Zad. 6: Sterowanie robotami mobilnymi w obecności przeszkód

Zad. 7: Sterowanie robotami mobilnymi w obecności przeszkód

Zad. 5: Układ równań liniowych liczb zespolonych

Zad. 6: Sterowanie dronami w obecności przeszkód

Laboratorium nr 4: Arytmetyka liczb zespolonych

Laboratorium nr 5: Mnożenie wektorów i macierzy

Zad. 7: Sterowanie manipulatorem przypadek 3D

Zad. 4: Szablonu dla układu równań liniowych

Zadanie 2: Arytmetyka symboli

Zadanie nr 2: Arytmetyka liczb zespolonych

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Zad. 10: Sterowanie manipulatorem cz. 2 i 3

Układ równań liniowych

Zad. 1: Sterowanie mimika

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

Skrypt 19. Trygonometria: Opracowanie L3

dr inż. Ryszard Rębowski 1 WPROWADZENIE

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

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.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Rozdział 4 KLASY, OBIEKTY, METODY

1 Powtórzenie wiadomości

1. Prymitywy graficzne

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

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

Podstawy MATLABA, cd.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Lab 9 Podstawy Programowania

MATLAB tworzenie własnych funkcji

Ćwiczenie nr 2 - Rysowanie precyzyjne

Rozwiązania, seria 5.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Szablony funkcji i szablony klas

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Laboratorium nr 10. Temat: Funkcje cz.2.

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

Informatyka I: Instrukcja 4.2

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2

Przekształcanie wykresów.

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

Programowanie strukturalne i obiektowe. Funkcje

Co to jest wektor? Jest to obiekt posiadający: moduł (długość), kierunek wraz ze zwrotem.

i = [ 0] j = [ 1] k = [ 0]

Przekształcenia liniowe

(1,10) (1,7) (5,5) (5,4) (2,1) (0,0) Grafika 3D program POV-Ray

Język C++ zajęcia nr 2

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

Języki i techniki programowania Ćwiczenia 2

Metody numeryczne Laboratorium 2

STEREOMETRIA. Poziom podstawowy

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wybrane zmiany wprowadzone w pakiecie Oprogramowanie: SyriuszStd

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Transformacja współrzędnych geodezyjnych mapy w programie GEOPLAN

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

MECHANIZM WYMIANY DANYCH ORAZ ROZLICZEŃ APTEKA NFZ

Przekształcenia geometryczne w grafice komputerowej. Marek Badura

Programowanie obiektowe

WYZNACZANIE PRZEMIESZCZEŃ SOLDIS

Kadry Optivum, Płace Optivum

Podstawy Programowania Obiektowego

Dodawanie grafiki i obiektów

Programowanie obiektowe - zadania

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Geometria. Rozwiązania niektórych zadań z listy 2

Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod

Moduł Handlowo-Magazynowy Przeprowadzanie inwentaryzacji z użyciem kolektorów danych

Rozdział 5: Style tekstu

Maskowanie i selekcja

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Szanowni Państwo. Należy przy tym pamiętać, że zmiana stawek VAT obejmie dwie czynności:

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Deklaracja struktury w C++

Klasa, metody, rozwijanie w linii

3. PŁASKI STAN NAPRĘŻENIA I ODKSZTAŁCENIA

9. Podstawowe narzędzia matematyczne analiz przestrzennych

Iloczyn wektorowy. Autorzy: Michał Góra

Instrukcja użytkownika

Zad.3. Jakub Trojgo i Jakub Wieczorek. 14 grudnia 2013

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Użycie przestrzeni papieru i odnośników - ćwiczenie

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Kurs walut. Specyfikacja projektu. Marek Zając

Transkrypt:

Zad. 4: Rotacje 3D 1 Cel ćwiczenia Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Generowanie dokumentacji z wykorzystaniem systemu doxygen. Praktyczne zweryfikowanie wcześniejszej konstrukcji programu. Jeśli nie jest dobrze napisany, to rozszerzenie wymagane w tym zadaniu będzie trudniejsze. 2 Program zajęć Ocena realizacji zadania z poprzedniego laboratorium ocenie podlega poprawność realizacji zadania, styl pisania programu oraz dokumentacja wygenerowana za pomocą programu doxygen. Ocena przygotowania do zajęć ocenie podlega przykładowa implementacja szablonu funkcji zgodnie z wytycznymi przedstawionymi w rozdziale 4. Modyfikacja programu wg wskazań osoby prowadzacej ocenie będzie podlegała poprawność realizacji modyfikacji. Pracę nad modyfikacją programu (wszystkie operacje należy wykonywać na kopii) należy rozpocząć już w trakcie pierwszej fazy laboratorium, gdyż prowadzący nie będzie w stanie ocenić wcześniejszego programu wszystkim jednocześnie. Realizacja wstępnej fazy prac nad nowym zadaniem w ramach wstępnej realizacji zadania należy stworzyć odpowiednio zmodyfikować klasy modelujące pojęcie wektora oraz macierzy, tak aby utworzyć z nich szablony. Ocena realizacji wstępnej fazy zadania 3 Opis zadania programowego Niniejsze zadanie jest kontynuacją wcześniejszego zadania. Obiektem, który ma być poddawany rotacjom jest prostopadłościan. Zasadnicza część menu programu będzie taka sama. Dochodzą jednak nowe pozycje związane z tym, że program powinien być w stanie składać obroty wokół kolejnych osi zgodnie z żądanym przez użytkownika porządkiem. obrót bryły o zadane kąty względem wybranych osi z zadaną ilością powtórzeń wraz ze sprawdzenie długości dwóch przeciwległych boków, powtórzenie poprzedniego obrotu, wyświetlenie macierzy rotacji, przesunięcie bryły o zadany wektor, wyświetlenie współrzędnych wierzchołków, wyświetlenie menu, zakończenie działania programu. 1

W tym zadaniu użytkownik powinien mieć możliwość zadania kąta obrotu, jak też osi układu współrzędnych (tzn. OX, OY lub OZ), względem której ma być dokonany obrót. Program powinien umożliwić wprowadzenie dowolnej sekwencji obrotów względem poszczególnych osi. Wspomnianą sekwencję kończy wprowadzenie znaku kropki zamiast oznaczenia osi obrotu. Natomiast oznaczeniami poszczególnych osi układu współrzędnych są znaki, odpowiednio: x, y oraz z. Dalsze wyjaśnia realizacji tej operacji znajdują się w przykładzie działania programu. 4 Przygotowanie do zajęć Dany jest przykłądowy program: void Wymnoz( double Arg1, double (&Arg2_Tab)[4]) { for (double &Mnoznik : Arg2_Tab) Mnoznik = Arg1 * Mnoznik; } int main() { double Arg1 = 2; double Tab[4] = {1, 2, 3, 4}; } Wymnoz(Arg1,Tab); Wymnaża ona elementy zawarte w tablicy i wynik składuje ponownie do tej tablicy. Należy zwrócić uwagę, że drugim argumentem jest referencja do tablicy. Dlatego też rozmiar tablicy jest widoczny wewnątrz funkcji Wymnoz. Tak nie będzie, gdy tablica zostanie przekazana przez wskaźnik. Dzięki temu, że rozmiar tablicy jest widoczny wewnątrz funkcji Wymnoz, w jej definicji można posłużyć się pętla zakresu. Należy przerobić funkcję Wymnoz na szablon funkcji, tak aby poniższa definicja funkcji main poprawnie kompilowała i konsolidowała się. int main() { double Arg1 = 2; double Tab[4] = {1, 2, 3, 4}; Wymnoz(Arg1,Tab); Macierz2x2 Wektor2D Mac; TabWek[4]; } Wymnoz(Mac,TabWek); Dla tych osób, dla których to zadanie okaże się za trudne, można zrealizować wariant łatwiejszy (niżej oceniany). Wystarczy przygotować własny dowolny przykład szablonu funkcji, którego użycie zapewni poprawną kompilację i konsolidację programu. 2

5 Przykład działania programu Poniżej przedstawiony przykład wyznacza formę komunikatów i ich forma jest obligatoryjny dla programu tworzonego w ramach niniejszego zadania. panamint>./program_obroty_3d :) Dluzsze przeciwlegle boki sa sobie rowne. Dlugosc pierwszego boku: 25.00000000000000000000 Dlugosc drugiego boku: 25.00000000000000000000 Dlugosc trzeciego boku: 25.00000000000000000000 Dlugosc czwartego boku: 25.00000000000000000000 :) Krotsze przeciwlegle boki sa sobie rowne. Dlugosc pierwszego boku: 15.00000000000000000000 Dlugosc drugiego boku: 15.00000000000000000000 Dlugosc trzeciego boku: 15.00000000000000000000 Dlugosc czwartego boku: 15.00000000000000000000 :) Poprzeczne przeciwlegle boki sa sobie rowne. Dlugosc pierwszego boku: 20.00000000000000000000 Dlugosc drugiego boku: 20.00000000000000000000 Dlugosc trzeciego boku: 20.00000000000000000000 Dlugosc czwartego boku: 20.00000000000000000000 o - obrot bryly o zadana sekwencje katow t - powtorzenie poprzedniego obrotu r - wyswietlenie macierzy rotacji p - przesuniecie prostokata o zadany wektor w - wyswietlenie wspolrzednych wierzcholkow s - sprawdzenie dlugosci przeciwleglych bokow m - wyswietl menu k - koniec dzialania programu Twoj wybor? (m - menu) > o Podaj sekwencje oznaczen osi oraz katy obrotu w stopniach x 20 y 30 x 30 a 50 :( Bledne oznaczenie osi. Dopuszczalne znaki to: x y z. :( Sprobuj jeszcze raz. z 50. Ile razy operacja obrotu ma byc powtorzona? 1 :) Dluzsze przeciwlegle boki sa sobie rowne. Dlugosc pierwszego boku: 25.00000000000000355271 3

Dlugosc drugiego boku: 25.00000000000000355271 Dlugosc trzeciego boku: 25.00000000000000355271 Dlugosc czwartego boku: 25.00000000000000355271 :O Krotsze przeciwlegle boki nie sa sobie rowne!!! Dlugosc pierwszego boku: 14.99999999999999822364 Dlugosc drugiego boku: 14.99999999999999822364 Dlugosc trzeciego boku: 14.99999999999999467093 Dlugosc czwartego boku: 14.99999999999999822364 :O Poprzeczne przeciwlegle boki nie sa sobie rowne!!! Dlugosc pierwszego boku: 20.00000000000000710543 Dlugosc drugiego boku: 20.00000000000000355271 Dlugosc trzeciego boku: 20.00000000000000355271 Dlugosc czwartego boku: 20.00000000000000355271 Twoj wybor? (m - menu) > k Koniec dzialania program panamint> _ 6 Realizacja rotacji Niech będzie dany punkt P = (x, y, z). Rozważmy najpierw rotację tego punktu wokół osi OZ o kąt α. Otrzymujemy nowy punkt P = (x,y,z ) tak jak to jest pokazane na rysunku rys. 1. Łatwo zauważyć, że współrzędna z-towa tego punktu nie zmienia się. Transformację tę można Rysunek 1: Rotacja punktu P o kąt α wokół osi OZ potraktować jako rozszerzenie wcześniejszej rotacji w układzie dwuwymiarowym, która opisana została w poprzednim zadaniu. Transformację Współrzędnych punktu P do współrzędnych punktu P realizujemy zgodnie z następującym wzorem: x = xcosα ysinα, y = xsinα + ycosα, z = z. 4

Możemy go zapisać w postaci macierzowej x cosα sinα 0 y = sinα cosα 0 z 0 0 1 x y z Tak więc mając na uwadze, że P = (x,y) i P = (x,y ) oraz oznaczając macierz rotacji R z,α, powyższą wzór można zapisać w formie P = R z,α P. W programie należy dokonać odpowiednich przeciążeń operatorów, aby tego typu zapis można było stosować bezpośrednio w programie. Analogicznie obrót wokół osi OY o kąt β możemy zapisać jako x y z = cosβ 0 sinβ 0 1 0 sinβ 0 cosβ Zmiana znaku przy funkcji sinus jest związana z przyjętą konwencją miary kąt. Kierunek dodatni miary jest od osi OZ do osi OX. Przedstawiony wyżej typ przekształcenia dalej zapisywać będziemy jako P = R y,β P. Natomiast macierz obrotu wokół osi OX o kąt γ ma postać x 1 0 0 y = 0 cosγ sinγ z 0 sinγ cosγ Analogicznie do wcześniejszej notacji przekształcenie to zapisywać będziemy jako P = R x,γ P. Załóżmy, że mamy przetransformować pewien punkt P a poprzez złożenie dwóch obrotów. Tak więc najpierw chcemy dokonać obrotu wokół osi OZ o kąt α, a później wokół osi OX o kąt γ. Tym samym chcemy wykonać następujące operację a następnie P a = R z,α P a, P a = R x,γ P a. Jednak te operacje możemy złożyć i zapisać jako P a = R x,γ (R z,α P a ) = (R x,γ R z,α )P a. Tak więc składanie obrotów jest równoważne przemnożeniu odpowiednich macierzy obrotów. Tę cechę należy wykorzystać przy oprogramowaniu pozycji menu o - obrot bryly o zadana sekwencje katow Należy zauważyć że obroty wokół różnych osi nie są przemienne, tzn. w ogólnym przypadku mamy R x,γ R z,α R z,α R x,γ. 5 x y z x y z..

7 Wymagania co do konstrukcji programu Oprócz wymagań sformułowanych w opisie zadania należy uwzględnić uwarunkowania przedstawione poniżej. Należy przekształcić klasy Wektor2D, Macierz2x2 do postaci szablonów Wektor<> i Macierz<>. Klasy Wektor3D, Macierz3x3, niezbędne w tym zadaniu, należy zdefiniować jako instancje wspomnianych wcześniej szablonów. W szablonach Wektor<>, Macierz<> powinny być zdefiniowane analogiczne przeciążenia operatorów jak w zadaniu poprzednim. Należy zwrócić uwagę, że w szablonie Macierz<> będzie dodatkowo potrzebna operacja mnożenia macierzy. Natomiast na bazie klasy Prostokąt należy zdefiniować klasę Prostopadloscian. W tym przypadku nie tworzymy szablonu. Definiowane klasy muszą mieć tylko i wyłacznie niezbędne pola reprezentujace atrybuty danego pojęcia. Należy również zwrócić uwagę, że ze względu na konieczność pamiętania wcześniejszego obrotu, niezbędne jest przechowywanie macierzy obrotu. Dobrze jest więc stworzyć dodatkową strukturę danych, której polami są odpowiednio bryła i macierz obrotu. Struktura ta będzie reprezentowała scenę, na której znajduje się obracana bryła. Program musi zachować strukturę modułową i odpowiednią strukturę kartotek. O ile będzie to konieczne, należy zmodyfikować plik Makefile (np. gdy dodany zostanie nowy moduł). Każda z klas powinna zostać zdefiniowana w oddzielnym pliku nagłówkowym. Metody tej klasy powinny być natomiast definiowane w osobnym module związanym z daną klasą, np. definicja klasy Prostopadloscian powinna znaleźć się w pliku nagłówkowym Prostopadloscian.hh, zaś metody w pliku Prostopadloscian.cpp. Proste metody można definiować bezpośrednio w ciele klasy. Dla poszczególnych klas należy przeciążyć niezbędne operatory działające na strumieniach. Nie wszystkie przeciążenia są w tym zadaniu potrzebne. Na pewno będą potrzebne przeciążenia operatorów wczytywania i zapisu dla klasy Wektor3D oraz operatora wyświetlania dla klasy Prostopadloscian. Wszystkie metody, które nie zmieniają stanu obiektu, na którym działają, powinny być metodami typu const. Program powinien umożliwiać graficzną wizualizację wyników działania. Pozwala na to dołączony w zalążku moduł łącza do programu gnuplot. Wszystkie klasy i metody oraz funkcje powinny zostać opisane. Opis ten powinien być zgodnie z wymogami systemu doxygen. Ponadto należy wygenerować dokumentację w formacie HTML za pomocą programu doxygen. Oprócz tego pozostają w mocy wszystkie wcześniejsze wymagania dotyczące struktury katalogów, pliku Makefile, modułowej struktury programu, jak też opisów. 6

8 Materiały pomocnicze Zalążek programu znajduje się w katalogu bk/edu/kpo/zad/z4. Zawiera on przykład wykorzystania modułu złącza do programu gnuplot, który pozwala zwizualizować wyniki obliczeń. Podstawowe objaśnienia znajdują się w kodzie dostarczonego zalążka. We wspomnianym katalogu znajduje się również przykład realizacji programu. 9 Zapis danych dla programu gnuplot Program gnuplot pozwala na rysowanie powierzchni. Można w ten sposób narysować wszystkie ścianki bryły. Jednak jest to trochę uciążliwe. Dlatego w tym zadaniu proponuje się narysowanie powierzchni prostopadłościanu bez dwóch przeciwległych ścianek (patrz rys. 2). Z tego powodu prostopadłościan przedstawiony na rys. 2 widoczny jest z prześwitem. Brzeg tych ścianek, które widoczne są od zewnątrz rysowany jest kolorem czerwonym. Natomiast brzeg ścianek widoczny od wewnątrz rysowany jest kolorem zielonym. Aby otrzymać rysunek w przedstawionej postaci, współrzędne wierzchołków należy zapisać do pliku tekstowego, który będzie przekazany gnuplotowi, w odpowiedni sposób. Rysunek 2: Rysunek prostopadłościanu w okienku programu gnuplot Chcąc lepiej przedstawić sposób zapisu na rys. 3 przedstawiony jest rysunek prostopadłościanu z oznaczeniem wszystkich wierzchołków. Schemat zapisu współrzędnych przedstawiony jest poniżej. Uwaga: wolne linie są istotne, należy również zwrócić uwagę na to, że na końcu należy powtórzyć zapis współrzędnych pierwszego i ostatniego wierzchołka. 7

x1 y1 z1 # <-- Współrzędne wierzchołka W1 x2 y2 z2 # <-- Współrzędne wierzchołka W2 x3 y3 z3 # <-- Współrzędne wierzchołka W3 x4 y4 z4 # <-- Współrzędne wierzchołka W4 x5 y5 z5 # <-- Współrzędne wierzchołka W5 x6 y6 z6 # <-- Współrzędne wierzchołka W6 x7 y7 z7 # <-- Współrzędne wierzchołka W7 x8 y8 z8 # <-- Współrzędne wierzchołka W8 x1 y1 z1 # <-- Współrzędne wierzchołka W1 x2 y2 z2 # <-- Współrzędne wierzchołka W2 Rysunek 3: Rysunek prostopadłościanu w okienku z zaznaczonymi kolejnymi wierzchołkami W dalszej część przedstawiony jest zapis faktycznych współrzędnych wierzchołków prostopadłościanu przedstawionego na obu rysunkach. 2.0000000000 3.0000000000 3.0000000000 22.0000000000 3.0000000000 3.0000000000 2.0000000000 18.0000000000 3.0000000000 22.0000000000 18.0000000000 3.0000000000 2.0000000000 18.0000000000 28.0000000000 22.0000000000 18.0000000000 28.0000000000 2.0000000000 3.0000000000 28.0000000000 22.0000000000 3.0000000000 28.0000000000 2.0000000000 3.0000000000 3.0000000000 22.0000000000 3.0000000000 3.0000000000 8

10 Uproszczenie Jeżeli zadanie sprawia zbyt duże problemy, to można je zrealizować w uproszczonej formie. W dalszej części przedstawione są proponowane zmiany. 10.1 Pominięcie sekwencji W uproszczonej wersji przy realizacji opcji: o - obrot bryly o zadana sekwencje katow można przyjąć, że obrót zadawany jest tylko względem jednej wybranej osi. Tak więc użytkownik zamiast wprowadzać sekwencję oznaczeń: znak osi, kąt obrotu; którą kończy kropką, wprowadzi tylko jedną taką parę. Skorzystanie z tego uproszczenia powoduje obniżenie oceny programu o 1,0 (tzn. jedną ocenę). 10.2 Pominięcie powtórzeń W kolejnym uproszczeniu można zrezygnować z opcji powtórzeń. Powoduje to jednak, że ocena programu będzie obniżona o 0,5. 11 Rozszerzenia Dla osób, które niniejsze zadanie nie sprawi problemu, proponuje się rozszerzenia przedstawione poniżej. 11.1 Zbiór brył Zamiast pojedynczej bryły, należy stworzyć scenę na której jest co najmniej 5 brył i każdą z nich z osobna można obracać niezależnie od innych. 11.2 Rysowanie bryły Należy tak zmodyfikować układ punktów zapisywanych w pliku, aby rysowała się pełna bryła, np. tak jak jest to przedstawione na stronie: http://rab.iiar.pwr.wroc.pl/ kreczmer/kpo/zadania/zad-manipulator/pomoc/zasoby/laczedognuplota-doc/index.html 12 Wymagania i zarys programu zajęć w okresie realizacji zadania 12.1 Tydzień 0 Należy napisać i użyć szablon funkcji zgodnie z wymogami przedstawionymi w rozdziale 4. 9

12.2 Tydzień 1 Przed zajęciami muszą zostać stworzone szablony klas Wektor<> oraz Macierz<>. Ich parametrem powinien być wymiar. Szablony muszą być tak napisane, aby można było je użyć dla dowolnego wymiaru np. 1 lub 1000. Poprawność definicji szablonów powinna być zweryfikowana poprzez ich użycie w poprzedniej wersji programu. Aby to było możliwe klasy Wektor2D oraz Macierz2x2 muszą zostać zdefiniowane jako instancje szablonów Wektor<> oraz Macierz<>, np. typedef Wektor<2> Wektor2D; typedef Macierz<2> Macierz2x2; Pozytywną weryfikacją definicji szablonów będzie uruchomienie programu z zadania nr 3 w wersji z szablonami. Dokumentacja szablonów powinna być stworzona na bazie wcześniejszej dokumentacji klas Wektor<> oraz Macierz<>. W większości przypadków nie powinna ona w ogóle wymagać (o ile wcześniej została dobrze napisna) tworzenia żadnego dodatkowego opisu. To co jest konieczne, to jedynie umieszczenie w opisach odpowiednich tagów, które są niezbędne do tworzenia dokumentacji przez program doxygen. Generowanie dokumentacji zostanie zaprezentowane na zajęciach. 12.3 Tydzień 2 Rozliczenie się z gotowego programu i rozpoczęcie następnego zadania. 10