Projekt

Obecné

Profil

Stáhnout (3.3 KB) Statistiky
| Větev: | Tag: | Revize:
1
#ifndef _SPHERE_HPP
2
#define _SPHERE_HPP
3

    
4
#include "element.hpp"
5

    
6
/// Třída Sphere představuje vykreslovanou kouli umístěnou do počátku soustavy
7
/// souřadnic bez jakékoli úpravy.
8
class Sphere: public Element
9
{
10
    public:
11
        /// Poloměr koule.
12
        static const float RADIUS;
13
        
14
        /// @return souřadnice prostředního bodu mezi vrcholy A a B.
15
        /// @param const QVector3D &a - první bod.
16
        /// @param const QVector3D &b - druhý bod.
17
        static const QVector3D middlePoint(const QVector3D &a, const QVector3D &b);
18
        
19
        /// @return jaký poloměr koule má při největší velikosti.
20
        static float getMaxRadius();
21
        
22
        /// Konstruktor vytvoří prvních osm trojúhelníků, představujících tu
23
        /// nejhrubší možnou kouli. Pak volá funkci subdivide(), která rekurzivně
24
        /// provádí vyhlazování koule.
25
        /// @param bool moving - jestli se jedná o pohyblivou, nebo statickou kouli.
26
        Sphere(bool moving);
27
        
28
        /// Nastavuje hodnoty představující minimální a maximální možnou
29
        /// souřadnici na ose Z.
30
        /// @param const QVector3D &minimumZ - minimální souřadnice na ose Z.
31
        /// @param const QVector3D &maximumZ - maximální souřadnice na ose Z.
32
        void setRangeZ(const float minimumZ, const float maximumZ);
33
        
34
        /// @return jak moc má být koule zvětšena (zmenšena) na aktuální souřadnici Z.
35
        float getCurrentScaling();
36
        
37
        /// Nastavuje pozici koule v prostoru.
38
        /// @param const QVector3D &position - bod v prostoru.
39
        void setPosition(const QVector3D &position);
40
        
41
        /// @return pozice koule v prostoru.
42
        const QVector3D getPosition();
43
        
44
        /// @return jestli už byly nastaveny všechny informace potřebné pro
45
        ///         vykreslení koule.
46
        bool isSet();
47
        
48
    private:
49
        /// Jak se má koule zvětšit (zmenšit) na maximální souřadnici na ose Z.
50
        static const float MAX_SCALING;
51
        
52
        /// Jak se má koule zmenšit (zvětšit) na minimální souřadnici na ose Z.
53
        static const float MIN_SCALING;
54
        
55
        /// Jak moc má být koule hladká (pouze hodnoty od 1 do 5).
56
        static const int SMOOTHING;
57
        
58
        /// Minimální a maximální souřadnice Z, na které se koule může vyskytnout.
59
        float minimumZ, maximumZ;
60
        
61
        /// Aktuální pozice koule v prostoru.
62
        QVector3D position;
63
        
64
        /// Jestli jsou nastaveny všechny informace potřebné pro vykreslení koule.
65
        /// Konkrétně se jedná o pozici v prostoru (s koulí se vykreslují i šipky).
66
        bool set;
67

    
68
        /// Funkce, ktera rekurzivně, podle dané urovně, provádí vyhlazování
69
        /// koule, resp. trojůhelníků v ní. Každý trojůhelník rozdělí na další čtyři.
70
        /// @param const QVector3D &a - souřadnice prvního vrcholu trojúhelníka.
71
        /// @param const QVector3D &b - souřadnice druhého vrcholu trojúhelníka.
72
        /// @param const QVector3D &c - souřadnice třetího vrcholu trojúhelníka.
73
        /// @param const int level - aktuální úroveň vyhlazování.
74
        void subdivide(const QVector3D &a, const QVector3D &b, const QVector3D &c, const int level);
75
};
76

    
77
#endif
(6-6/10)