Hlavní navigace

Knihovna ClanLib (24)

Petr Kavánek

V dalším pokračování seriálu o knihovně ClanLib se po poněkud náročnějších tématech několika minulých dílů zaměříme na něco snazšího. Povíme si totiž o třídách, jimiž v ClanLibu můžeme reprezentovat bod (CL_Point) a velikost obdelníku (CL_Size).

Znalost těchto tříd by vám měla šetřit čas při programování, proto jsem se i tento článek snažil napsat tak, aby nikdo nemohl říct: „To si to sám napíšu dřív, než tohle přečtu!“ :-). Jestli se mi to povedlo, už musíte posoudit sami.

CL_Point a CL_Pointf

Dvě třídy, jejichž použití je zcela analogické. První je určena pro práci s celými čísly, druhá pro práci s čísly reálnými. Abychom nemuseli psát (resp. číst) dvakrát skoro to samé, budeme se nadále zabývat první z nich.

Veškerá informace, kterou v sobě objekty třídy CL_Point nesou, je informace o jejich poloze, tj. x-ová a y-ová souřadnice.

K souřadnicím můžeme přistupovat přímo přes veřejné proměnné x, y.

CL_Point p(10, 15);
int xova = p.x;
int yova = p.y;

Hodit se nám jistě budou konstruktory:

CL_Point(int x, int y);
CL_Point(const CL_Point &p);

První vytvoří bod na zadaných souřadnicích. Druhý vytvoří bod na souřadnicích stejných, jako jsou souřadnice bodu předaného jako argument p. Použít můžeme i konstruktor bez argumentů, ten však vytvoří bod na náhodných souřadnicích.

Důležité je, že můžeme využít následující užitečné metody a přetížené operátory:


Metoda rotate(), jak vidíte, slouží k otočení našeho bodu okolo jiného bodu o zadaný úhel.

Metoda distance() vrací vzdálenost našeho bodu od bodu zadaného.


Přetížený operátor += posune náš bod o vektor daný parametrem p a počátkem, tj. bodem na souřadnicích (0, 0), ve směru od počátku k zadanému bodu.


Operátor -= se chová jako výše popsaný operátor += s tím rozdílem, že posunuje v opačném směru.


Operátor + vrací bod, který by vznik použitím operátoru +=, avšak náš bod ponechává nezměněný, tj. vytváří nový bod.


Operátor – funguje analogicky jako operátor +.

K dispozici máme také přetížený operátor ==, který vrací true, mají-li porovnávané body shodné souřadnice. Operátor != naopak vrací true v případě, že porovnávané body mají různé souřadnice.

CL_Size a CL_Sizef

Třída CL_Size (a analogická třída CL_sizef) je ještě jednodušší než třída CL_Point. Uchovává také dvě hodnoty ve dvou veřejných proměnných. Proměnné jsou pojmenovány width (šířka) a height (výška).

Konstruktory fungují obdobně jako u CL_Point

CL_Size(int width, int height);
CL_Size(const CL_Size &s);

Použít můžeme opět několik přetížených operátorů, jejichž definice jsou myslím samovysvětlující:

CL_Size& operator += (const CL_Size& s);

Vrací náš objekt s šířkou zvětšenou o šířku předaného objektu s a výškou zvětšenou o výšku předaného objektu s.

CL_Size& operator -= (const CL_Size& s)+

Analogicky jako +=, avšak zde naše rozměry zmenšujeme o rozměry argumentu.

CL_Size operator + (const CL_Size& s) const;

Vrací nový objekt s výškou rovnou součtu výšek našeho a předaného objektu a s šířkou rovnou součtu šířek našeho a předaného objektu.

CL_Size operator - (const CL_Size& s) const;

Analogicky s předchozím, avšak šířka nového objektu bude rovna rozdílu naší šířky a šířky předaného. Obdobně výška.

bool operator == (const CL_Size& s) const;

Vrátí true, jestliže porovnávané objekty mají stejné oba rozměry.

bool operator!=(const CL_Size &s) const;

Vrátí true, jestliže se alespoň jeden z rozměrů liší.

Závěr

Asi by každý z vás dovedl podobné třídy naprogramovat sám, avšak po přečtení dnešního článku se, jak doufám, místo toho budete moci věnovat něčemu zábavnějšímu.

Našli jste v článku chybu?