#ifndef VECTOR3D_H
#define VECTOR3D_H

/**
@class Vector3D
Класс, описывающий трехмерные переменные, содержит 3 конструктора,
деструктор, 3 члена данных вещественного типа и девять методов.
*/
class Vector3D
{
public:
        /// этот член - абсцисса вектора
        float X;
        /// этот член - ордината вектора
        float Y;
        /// этот член - аппликата вектора
        float Z;

        /// Конструктор
        Vector3D();
        /// Конструктор преобразования трех вещественных переменных в объект класса
        Vector3D(const float x, const float y, const float z);
        /// Конструктор копирования
        Vector3D(const Vector3D &V);
        /// Деструктор
        ~Vector3D();

        /// Оператор, складывающий 2 трехмерных вектора. Первое слагаемое - объект класса, к которому применяется операция
        /// @param  V – второе слагаемое(может быть константным)
        /// @return Сумма векторов, являющаяся объектом того же класса
        Vector3D operator+ (const Vector3D &V);
        /// Оператор, складывающий 2 трехмерных вектора и присваивающий возвращаемое значение объекту класса, к которому применяется операция
        /// @param  V – второе слагаемое(может быть константным)
        /// @return Сумма векторов, являющаяся объектом того же класса
        Vector3D operator+= (const Vector3D &V);
        /// Оператор, умножающий трехмерный вектор на число вещественного типа.
        /// @param  t – параметр(может быть константным)
        /// @return Произведение вектора на число, являющаяся объектом того же класса
        Vector3D operator* (const float t);
        /// Оператор, вычитающий 2 трехмерных вектора. Первое - уменьшаемое - объект класса, к которому применяется операция
        /// @param  V – второе - вычитаемое(может быть константным)
        /// @return Разность векторов, являющаяся объектом того же класса
        Vector3D operator- (const Vector3D &V);
        /// Оператор - унарный минус.
        /// @return объектом того же класса, но с другим знаком(-1 -> 1)
        Vector3D operator- ();
        /// Метод, умножающий 2 трехмерных вектора. Первое - умножаемое - объект класса, к которому применяется операция
        /// @param  V – второе - множитель(может быть константным)
        /// @return Произведение поочередно стоящих компонент векторов
        float operator* (Vector3D &V);
        /// Метод, считающий длину вектора.
        /// @return Длина вектора вещественного типа
        float Length();
        /// Метод, считающий квадрат длины вектора.
        /// @return Квадрат длины вектора вещественного типа
        float SqrLen();
        /// Метод, нормирующий вектора.
        /// @return Нормированный вектор
        Vector3D NormVect();

};

#endif // VECTOR3D_H
