#ifndef _SPHERE_HPP #define _SPHERE_HPP #include "element.hpp" /// Třída Sphere představuje vykreslovanou kouli umístěnou do počátku soustavy /// souřadnic bez jakékoli úpravy. class Sphere: public Element { public: /// Poloměr koule. static const float RADIUS; /// @return souřadnice prostředního bodu mezi vrcholy A a B. /// @param const QVector3D &a - první bod. /// @param const QVector3D &b - druhý bod. static const QVector3D middlePoint(const QVector3D &a, const QVector3D &b); /// @return jaký poloměr koule má při největší velikosti. static float getMaxRadius(); /// Konstruktor vytvoří prvních osm trojúhelníků, představujících tu /// nejhrubší možnou kouli. Pak volá funkci subdivide(), která rekurzivně /// provádí vyhlazování koule. /// @param bool moving - jestli se jedná o pohyblivou, nebo statickou kouli. Sphere(bool moving); /// Nastavuje hodnoty představující minimální a maximální možnou /// souřadnici na ose Z. /// @param const QVector3D &minimumZ - minimální souřadnice na ose Z. /// @param const QVector3D &maximumZ - maximální souřadnice na ose Z. void setRangeZ(const float minimumZ, const float maximumZ); /// @return jak moc má být koule zvětšena (zmenšena) na aktuální souřadnici Z. float getCurrentScaling(); /// Nastavuje pozici koule v prostoru. /// @param const QVector3D &position - bod v prostoru. void setPosition(const QVector3D &position); /// @return pozice koule v prostoru. const QVector3D getPosition(); /// @return jestli už byly nastaveny všechny informace potřebné pro /// vykreslení koule. bool isSet(); private: /// Jak se má koule zvětšit (zmenšit) na maximální souřadnici na ose Z. static const float MAX_SCALING; /// Jak se má koule zmenšit (zvětšit) na minimální souřadnici na ose Z. static const float MIN_SCALING; /// Jak moc má být koule hladká (pouze hodnoty od 1 do 5). static const int SMOOTHING; /// Minimální a maximální souřadnice Z, na které se koule může vyskytnout. float minimumZ, maximumZ; /// Aktuální pozice koule v prostoru. QVector3D position; /// Jestli jsou nastaveny všechny informace potřebné pro vykreslení koule. /// Konkrétně se jedná o pozici v prostoru (s koulí se vykreslují i šipky). bool set; /// Funkce, ktera rekurzivně, podle dané urovně, provádí vyhlazování /// koule, resp. trojůhelníků v ní. Každý trojůhelník rozdělí na další čtyři. /// @param const QVector3D &a - souřadnice prvního vrcholu trojúhelníka. /// @param const QVector3D &b - souřadnice druhého vrcholu trojúhelníka. /// @param const QVector3D &c - souřadnice třetího vrcholu trojúhelníka. /// @param const int level - aktuální úroveň vyhlazování. void subdivide(const QVector3D &a, const QVector3D &b, const QVector3D &c, const int level); }; #endif