Hlavní navigace

Knihovna ClanLib (24)

Petr Kavánek 25. 10. 2004

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?
Vitalia.cz: Jak koupit Mikuláše a nenaletět

Jak koupit Mikuláše a nenaletět

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Podnikatel.cz: Přivýdělek u Airbnb nebo Uberu? Čekejte kontrolu

Přivýdělek u Airbnb nebo Uberu? Čekejte kontrolu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: E-shopy: jen sleva už nestačí

E-shopy: jen sleva už nestačí

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Vláknina: Rozpustná, nebo nerozpustná?

Vláknina: Rozpustná, nebo nerozpustná?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?