Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

public:pb161_fall14_hw02_579954 [2014/08/14 16:59]
xbella [Trieda Geometry2D]
public:pb161_fall14_hw02_579954 [2018/02/24 19:10]
Řádek 1: Řádek 1:
-====== Domáca úloha č. 2: Objektová hierarchia pre grafické objekty ====== 
- 
-  * Úloha zadaná: **xx. xx. 2014** 
-  * Odovzdávanie naostro možné od: **xx. xx. 2014** 
-  * Absolútny koniec odovzdávania:​ **xx. xx. 2014** 
-  * Odovzdávate súbory: ''​circle.h'',​ ''​circle.cpp'',​ ''​color.h'',​ ''​color.cpp'',​ ''​ellipse.h'',​ ''​ellipse.cpp'',​ ''​geometry2d.h'',​ ''​geometry2d.cpp'',​ ''​point.h'',​ ''​point.cpp'',​ ''​rectangle.h'',​ ''​rectangle.cpp'',​ ''​vector2d.h'',​ ''​vector2d.cpp''​ 
- 
-Doplnenie zadania (zobrazené __podčiarknuto__):​ 
-  * zatiaľ nič 
- 
-===== Predstavenie úlohy ===== 
- 
-V tejto úlohe si precvičíme objektovo-orientovaný návrh na jednoduchej hierarchii grafických objektov. Kostra, ktorú v tejto úlohe vytvoríte, môže byť základom pre ďalšie aplikácie. Príkladom využitia je napríklad primitívne SVG kreslítko. 
-===== Zadanie ===== 
- 
-Vašou úlohou bude implementovať nasledujúcu hierarchiu. ​ 
- 
- 
-{{ :​public:​pb161:​2014_hw02:​hw02_diagram.png?​direct&​1000 |}} 
- 
-Základným prvkom je abstraktná trieda **Geometry2D**,​ reprezentujúca všeobecný 2D grafický objekt. Každý 2D grafický objekt leží na určitej pozícii a má určitú farbu. V tejto úlohe rozlíšime 3 typy objektov - kruh (trieda **Circle**),​ elipsu (trieda **Ellipse**) a obdĺžnik (trieda **Rectangle**). Nezávisle na type objektu môžme pre každý zistiť jeho pozíciu, farbu, obsah, vypísať si informácie o objekte a tiež zodpovedajúcu SVG značku. 
- 
-Pozícia objektu je daná 2D bodom (trieda **Point**). Meniť polohu bodu je možné posunutím podľa istého vektoru (trieda **Vector2D**). ​ 
- 
-Farba objektu je daná triedou **Color**. Farby v triede Color budú zadané v RGB farebnom priestore. Špecifikovať farbu bude možné po zložkách, alebo pomocou hexadecimálneho kódu. ​ 
-===== Požiadavky ===== 
- 
-==== Trieda Point ==== 
- 
-<code cpp>​Point();</​code>​ 
-  * bezparametrický konštruktor,​ nastaví pozíciu na počiatok súradnicovej sústavy (0,0) 
- 
-<code cpp>​Point(int x, int y);</​code>​ 
-  * nastaví pozíciu na dané súradnice 
- 
-<code cpp>void translate(const Vector2D&​ vector);</​code>​ 
-  * posunie bod o daný vektor 
- 
-<code cpp>int getX() const;</​code>​ 
-  * vráti hodnotu súradnice x 
- 
-<code cpp>int getY() const;</​code>​ 
-  * vráti hodnotu súradnice y 
- 
-<code cpp>void setX(int x);</​code>​ 
-  * nastaví súradnicu x 
- 
-<code cpp>void setY(int y);</​code>​ 
-  * nastaví súradnicu y 
- 
- 
-==== Trieda Vector2D ==== 
- 
-<code cpp>​Vector2D();</​code>​ 
-  * bezparametrický konštruktor,​ nastaví súradnice vektora na počiatok súradnicovej sústavy (0,0) 
- 
-<code cpp>​Vector2D(int x, int y);</​code>​ 
-  * nastaví vektor na dané súradnice 
- 
-<code cpp>void add(const Vector2D&​ vector);</​code>​ 
-  * súčet vektorov 
- 
-<code cpp>int getX() const;</​code>​ 
-  * vráti hodnotu súradnice x 
- 
-<code cpp>int getY() const;</​code>​ 
-  * vráti hodnotu súradnice y 
- 
-<code cpp>void setX(int x);</​code>​ 
-  * nastaví súradnicu x 
- 
-<code cpp>void setY(int y);</​code>​ 
-  * nastaví súradnicu y 
- 
-==== Trieda Color ==== 
- 
-<code cpp>​Color();</​code>​ 
-  * bezparametrický konštruktor,​ nastaví sa čierna farba (nulové hodnoty RGB) 
- 
-<code cpp>​Color(unsigned int red, unsigned int green, unsigned int blue);</​code>​ 
-  * nastaví jednotlivé zložky na príslušné hodnoty 
-  ​ 
-<code cpp>​Color(std::​string code);</​code>​ 
-  * nastaví jednotlivé zložky podľa zadaného hexadecimálneho kódu 
-  * formát kódu: RRGGBB (dve hexa číslice pre červenú, zelenú a modrú v tomto poradí) 
-  * kód bude vždy validný - musí mať práve 6 hexa znakov ​ - toto nemusíte testovať 
-  * na riešenie môžte použiť aj nástroje z jazyka C - užitočný môže byť napríklad hlavičkový súbor <​cstdlib>​ 
- 
-<code cpp>​std::​string getCode() const;</​code>​ 
-  * vráti reťazec obsahujúci hexadecimálny kód farby 
-  * formát kódu: RRGGBB - vždy musí mať práve 6 znakov! 
-  * znaky a..f budú malými písmenami 
-  * na riešenie môžte použiť aj nástroje z jazyka C - môže byť užitočná napríklad funkcia sprintf(). V ďalších prednáškach sa budete učiť o prúdoch a ich manipulátoroch (C++ riešenie). ​ 
-    
-<code cpp>​unsigned int getRed() const;</​code>​ 
-  * vráti červenú zložku farby 
- 
-<code cpp>​unsigned int getGreen() const;</​code>​ 
-  * vráti zelenú zložku farby 
- 
-<code cpp>​unsigned int getBlue() const;</​code>​ 
-  * vráti modrú zložku farby 
- 
- 
-==== Trieda Geometry2D ==== 
-<code cpp>void setColor(const Color& color);</​code>​ 
-  * nastaví farbu objektu 
- 
-<code cpp>void setPosition(const Point& position);</​code>​ 
-  * nastaví pozíciu objektu 
- 
-<code cpp>​Color getColor();</​code>​ 
-  * vráti farbu objektu 
- 
-<code cpp>​Point getPosition() const;</​code>​ 
-  * vráti pozíciu objektu 
- 
-<code cpp>​double getSum() const;</​code>​ 
-  * v triede Geometry2D abstraktná metóda, vráti obsah objektu 
-  * vzorce: ​ 
-    * obsah kruhu: π·r² 
-    * obsah obdĺžnika:​ výška·šírka 
-    * obsah elipsy: π·a·b 
-  * hodnotu π použite z hlavičkového súboru cmath. 
- 
-<code cpp>void printInfo() const;</​code>​ 
-  * v triede Geometry2D abstraktná metóda, vypíše informácie o objekte na štandarný výstup (std::cout) 
-  * formát: //objekt// at: (//​x//,//​y//​),​ color: //rrggbb// 
-  * slovne: //​názov_objektu//​ medzera "​at"​ dvojbodka medzera zátvorka //​súradnica_x//​ čiarka //​súradnica_y//​ zátvorka čiarka medzera "​color"​ dvojbodka medzera //​RGB_kód//​ koniec_riadku 
-  * //objekt// - buď "​circle",​ "​ellipse"​ alebo "​rectangle"​ 
-  * //x//, //y// - súradnice objektu 
-  * //rrggbb// - hexadecimálny kód farby objektu 
-  * všetko je malými písmenami 
-  * príklad: circle at: (14,15), color: a1b2c3 
- 
-<code cpp>​std::​string getSVG() const;</​code>​ 
-  * abstraktná metóda, vráti reťazec obsahujúci SVG-tag prislúchajúci danému objektu - bude upresnené pre každú triedu zvlásť 
-  * podobne ako pri //​Color::​getCode()//​ môžete využiť napríklad sprintf() 
- 
- 
-<note important>​Doplňte do triedy virtuálny deštruktor. Keďže sa riešenie úlohy predpokladá bez dynamickej alokácie, nebude mať extra význam, ale zabráni warningom pri preklade programu.</​note>​ 
- 
- 
- 
- 
-==== Trieda Circle ==== 
- 
-Trieda Circle dedí z triedy Geometry2D a implementuje jej abstraktné metódy. Ďalšie metódy: 
- 
-<code cpp>​Circle(unsigned int radius);</​code>​ 
-  * nastaví polomer na radius, pozíciu na bod (0,0) a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Circle(unsigned int radius, Color color);</​code>​ 
-  * nastaví polomer na radius, farbu na color a pozíciu na bod (0,0) 
- 
-<code cpp>​Circle(Point position, unsigned int radius);</​code>​ 
-  * nastaví polomer na radius, pozíciu na position a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Circle(Point position, unsigned int radius, Color color);</​code>​ 
-  * nastaví polomer na radius, farbu na color a pozíciu position 
- 
-<code cpp>​Circle(const Circle& circle);</​code>​ 
-  * kopírovací konštruktor 
- 
-<code cpp>​unsigned int getRadius() const;</​code>​ 
-  * vráti polomer kruhu 
- 
-<code cpp>void setRadius(unsigned int radius);</​code>​ 
-  * nastaví polomer kruhu 
- 
-**Formát SVG značky pre Circle:** <circle cx="//​pos_x//"​ cy="//​pos_y//"​ r="//​polomer//"​ fill="#//​rrggbb//"/>​ 
- 
-Slovne: zátvorka "​circle"​ medzera "​cx="​ úvodzovka súradnica_x úvodzovka medzera "​cy="​ úvodzovka súradnica_y úvodzovka medzera "​r="​ úvodzovka polomer úvodzovka medzera "​fill="​ úvodzovka krížik rgb_kód úvodzovka lomítko zátvorka 
- 
-Príklad: <circle cx="​20"​ cy="​20"​ r="​10"​ fill="#​12ab3f">​ 
- 
-__Za poslednú závorku nevkladajte znak nového riadku.__ 
-==== Trieda Rectangle ==== 
-Trieda Rectangle dedí z triedy Geometry2D a implementuje jej abstraktné metódy. Ďalšie metódy: 
- 
-<code cpp>​Rectangle(unsigned int width, unsigned int height);</​code>​ 
-  * konštruktor,​ nastaví šírku na width, výšku na height, pozíciu na bod (0,0) a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Rectangle(unsigned int width, unsigned int height, Color color);</​code>​ 
-  * konštruktor,​ nastaví šírku na width, výšku na height, farbu na color a pozíciu na bod (0,0) 
- 
-<code cpp>​Rectangle(Point position, unsigned int width, unsigned int height);</​code>​ 
-  * konštruktor,​ nastaví šírku na width, výšku na height, pozíciu na position a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Rectangle(Point position, unsigned int width, unsigned int height, Color color);</​code>​ 
-  * konštruktor,​ nastaví šírku na width, výšku na height, pozíciu na position a farbu na color 
- 
-<code cpp>​Rectangle(const Rectangle&​ rectangle);</​code>​ 
-  * kopírovací konštruktor 
- 
-<code cpp>​unsigned int getWidth() const;</​code>​ 
-  * vráti šírku obĺžnika 
- 
-<code cpp>​unsigned int getHeight() const;</​code>​ 
-  * vráti výšku obĺžnika 
- 
-<code cpp>void setWidth(unsigned int width);</​code>​ 
-  * zmení šírku obdĺžnika na width 
- 
-<code cpp>void setHeight(unsigned int height);</​code>​ 
-  * zmení výšku obdĺžnika na width 
- 
-**Formát SVG značky pre Rectangle:​** <rect x="//​pos_x//"​ y="//​pos_y//"​ width="//​šírka//"​ height="​výška"​ fill="#//​rrggbb//"/>​ 
- 
-Slovne: zátvorka "​rect"​ medzera "​x="​ úvodzovka súradnica_x úvodzovka medzera "​y="​ úvodzovka súradnica_y úvodzovka medzera "​width="​ úvodzovka hodnota_šírky úvodzovka medzera "​height="​ úvodzovka hodnota_výšky úvodzovka medzera "​fill="​ úvodzovka krížik rgb_kód úvodzovka lomítko zátvorka 
- 
-Príklad: <rect x="​0"​ y="​0"​ width="​50"​ height="​50"​ fill="#​0ab042">​ 
- 
-__Za poslednú závorku nevkladajte znak nového riadku.__ 
-==== Trieda Ellipse ==== 
- 
-Trieda Ellipse dedí z triedy Geometry2D a implementuje jej abstraktné metódy. Ďalšie metódy: 
- 
-<code cpp>​Ellipse(unsigned int a, unsigned int b);</​code>​ 
-  * konštruktor,​ nastaví dĺžku hlavnej polosi na a a veľajšie polosi na b, pozíciu na bod (0,0) a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Ellipse(unsigned int a, unsigned int b, Color color);</​code>​ 
-  * konštruktor,​ nastaví dĺžku hlavnej polosi na a a veľajšie polosi na b, farbu na color a pozíciu na bod (0,0) 
- 
-<code cpp>​Ellipse(Point position, unsigned int a, unsigned int b);</​code>​ 
-  * konštruktor,​ nastaví dĺžku hlavnej polosi na a a veľajšie polosi na b, pozíciu na position a farbu na čiernu RGB(0,0,0) 
- 
-<code cpp>​Ellipse(Point position, unsigned int a, unsigned int b, Color color);</​code>​ 
-  * konštruktor,​ nastaví dĺžku hlavnej polosi na a a veľajšie polosi na b, pozíciu na position a farbu na color 
- 
-<code cpp>​Ellipse(const Ellipse&​ ellipse);</​code>​ 
-  * kopírovací konštruktor 
- 
-<code cpp>​unsigned int getA() const;</​code>​ 
-  * vráti dĺžku hlavnej polosi 
- 
-<code cpp>​unsigned int getB() const;</​code>​ 
-  * vráti dĺžku vedľajšej polosi 
- 
-<code cpp>void setA(unsigned int a);</​code>​ 
-  * nastaví dĺžku hlavnej polosi na a 
- 
-<code cpp>void setB(unsigned int b);</​code>​ 
-  * nastaví dĺžku vedľajšej polosi na b 
- 
-**Formát SVG značky pre Ellipse:** <ellipse cx="//​pos_x//"​ cy="//​pos_y//"​ rx="//​hlavná_poloos//"​ ry="//​vedľajšia_poloos//"​ fill="#//​rrggbb//"/>​ 
- 
- 
-Slovne: zátvorka "​ellipse"​ medzera "​cx="​ úvodzovka súradnica_x úvodzovka medzera "​cy="​ úvodzovka súradnica_y úvodzovka medzera "​rx="​ úvodzovka dĺžka_a úvodzovka medzera "​ry="​ úvodzovka dĺžka_b úvodzovka medzera "​fill="​ úvodzovka krížik rgb_kód úvodzovka lomítko zátvorka 
- 
-Príklad: <ellipse cx="​100"​ cy="​50"​ rx="​60"​ ry="​12"​ fill="#​0000ff">​ 
- 
-__Za poslednú závorku nevkladajte znak nového riadku.__ 
-===== SVG kreslítko ===== 
- 
-Tu si môžte stiahnuť: ''​pictures.h'',​ ''​svgbuilder.h'',​ ''​main.cpp''​. {{:​public:​pb161:​2014_hw02:​hw02_picturescreator.tar.gz|súbory}}. 
- 
-Program by s pomocou vami implementovaných tried mal dokázať nakresliť niečo takéto: 
- 
-{{:​public:​pb161:​2014_hw02:​circles.png?​direct&​100|}}{{:​public:​pb161:​2014_hw02:​face.png?​direct&​100|}} 
- 
-Samozrejme, fantázii sa medze nekladú a môžte si vytvoriť niečo vlastné. 
-===== Poznámky ===== 
- 
-**Autor:** Úlohu Mgr. Jana Juráňa upravil Ján Bella, v prípade nejasností kontaktujte na diskusnom fóre, prípadne na <​xbella1@fi.muni.cz>​. 
- 
  
QR Code
QR Code public:pb161_fall14_hw02_579954 (generated for current page)