Zaprojektuj klasę, reprezentującą figurę na płaszczyźnie: trapez równoramienny.
Zaproponuj zestaw pól dla tej klasy, pozwalający na jednoznaczne określenie jej położenia na płaszczyźnie względem początku układu współrzędnych oraz jednoznacznie określający jej rozmiary (np. długości boków, podstawy, itd.). Dla uproszczenia przyjmij, że trapez jest zawsze rysowany w określonej pozycji, np. podstawą równolegle do osi X. Projektując zestaw pól postaraj się zminimalizować ich liczbę. Np. gdyby to dotyczyło kwadratu, to do określenia położenia wystarczą współrzędne jednego z wierzchołków, np. lewy-dolny, a do określenia rozmiarów – długość jednego boku. Za pomocą tych wartości jesteśmy już w stanie łatwo wyznaczyć w kwadracie współrzędne wszystkich pozostałych wierzchołków oraz długości pozostałych boków.
Zbiór pól reprezentujących położenie trapezu powinien być rozłączny ze zbiorem pól reprezentujących jego rozmiary, tak aby ewentualne operacje zmiany położenia nie obejmowały modyfikacji pól rozmiaru, a np. skalowanie nie modyfikowało pól położenia.
Wszystkie pola mają być niedostępne z zewnątrz (zadeklarowane jako private
).
Do klasy dodaj trzy metody zadeklarowane jako publiczne:
- Pierwsza – ma ustalać położenie i rozmiary figury, tj. modyfikować wartości pól opisujących położenie i rozmiar. Nowe wartości dla pól powinny być podawane w argumentach wywołania metody. Metoda powinna kontrolować poprawność wartości podawanych w argumentach wywołania i jeżeli są nieprawidłowe (np. ujemne długości boków) powinna je zastępować bezpiecznymi wartościami domyślnymi.
- Druga – powinna wypisywać wartości wszystkich pól figury w oknie konsoli oraz dodatkowo wypisywać aktualne współrzędne wszystkich jej wierzchołków wyliczone na podstawie wartości pól.
- Trzecia – powinna wyrażać przekształcenie symetrii osiowej względem prostej opisanej równaniem x=n, tj. jako argument powinna przyjmować wartość rzeczywistą n, a w swoim działaniu powinna przeliczyć wszystkie wartości tych i tylko tych pól, które są odpowiedzialne za położenie tak, aby w rezultacie tego działania przyjęły one wartości określające położenie figury po przekształceniu.
Napisz program, który w funkcji main
deklaruje obiekt typu trapez
, po czym:
- inicjalizuje go wartościami pobranymi od użytkownika, tak aby powstał prawidłowy trapez, korzystając z metody nr 1,
- wywołuje na rzecz tego obiektu metodę nr 2 wypisującą wszystkie pola i współrzędne w oknie konsoli,
- prosi użytkownika o podanie argumentu dla metody symetrii osiowej i wywołuje na rzecz tego obiektu metodę nr 3,
- ponownie wywołuje na rzecz tego obiektu metodę wypisującą wszystkie pola i współrzędne w oknie konsoli, aby zobaczyć nowe położenie figury,
- ponownie wywołuje na rzecz tego obiektu metodę symetrii osiowej z tym samym argumentem co poprzednio,
- a na koniec jeszcze raz wywołuje metodę wypisującą wszystkie pola i współrzędne w oknie konsoli, aby sprawdzić, czy figura wróciła na swoje miejsce.