예제 #1
0
        public static PolarVector operator +(PolarVector leftVector, PolarVector rightVector)       // перегрузка оператора + векторное сложение
        {
            const int   halfSpin     = 180;
            PolarVector resultVector = new PolarVector();

            resultVector._length =                                                                  // подсчитываем длину нового вектора по теореме косинусов
                                   Math.Sqrt(leftVector._length * leftVector._length + rightVector._length * rightVector._length
                                             - 2 * leftVector._length * rightVector._length * Math.Cos((leftVector._angle + halfSpin - rightVector._angle) * Math.PI / halfSpin));
            if (resultVector._length > 0)                                                           // проверяем, не будет ли деления на ноль
            {
                resultVector._angle = leftVector._angle -                                           // по теореме синусов подсчитываем новый угол
                                      Math.Asin(Math.Sin((rightVector._angle + halfSpin - leftVector._angle) * Math.PI / halfSpin) * rightVector._length / resultVector._length) * halfSpin / Math.PI;
                resultVector.DelFullSpins();
            }
            else
            {
                resultVector._angle = 0;
                throw new DivideByZeroException("Length of the result vector was 0. Can`t calculate the result because of division by zero");                                                      // ошибка - деление на ноль
            }
            return(resultVector);
        }
예제 #2
0
        public static PolarVector operator *(PolarVector vector, double factor)                     //перегрузка оператора * - умножение вектора на число
        {
            PolarVector resultVector = new PolarVector(vector._length * factor, vector._angle);     // при умножении увеличивается только длина вектора

            return(resultVector);
        }
예제 #3
0
        public static PolarVector operator *(double factor, PolarVector vector)
        {
            PolarVector resultVector = new PolarVector(vector._length * factor, vector._angle);

            return(resultVector);
        }
예제 #4
0
 public PolarVector(PolarVector copyFrom)        // конструктор копирования
 {
     _length = copyFrom._length;
     _angle  = copyFrom._angle;
 }