//TODO: деление на ноль
        //нахождение высоты Z точки p0, лежащей на прямой между точками p3 p4  (прямая паралельна оси Y)
        public static dobPoint CalcPY(dobPoint p1, dobPoint p2, dobPoint p0)
        {
            dobPoint ReturnPoint = new dobPoint(p0.X, p0.Y, p0.Z, 0);

            ReturnPoint.Z = p1.Z + (((p1.Z - p2.Z) / (p1.Y - p2.Y)) * (p0.Y - p1.Y));

            return(ReturnPoint);
        }
        /*
         *    Корректировка высоты по оси Z, у точки №5, зная высоту по Z у точек 1,2,3,4
         *
         *  /\ ось Y
         *  |
         *  |    (точка №1) -------------*--------------- (точка №2)
         *  |                            |
         *  |                            |
         *  |                            |
         *  |                       (точка №5)
         *  |                            |
         *  |                            |
         *  |    (точка №3) -------------*--------------- (точка №4)
         *  |
         *  |
         *  *----------------------------------------------------------------> ось X
         *  Корректировка выполняется следующим образом:
         *  1) зная координату X у точки 5, и координаты точек 1 и 2, вычисляем высоту Z в точке которая находится на линии точек 1,2 и перпендикулярно 5-й точке (получает точку №12)
         *  2) Тоже самое вычисляется для точки на линии точек 3,4 (получает точку №34)
         *  3) Зная координаты точек №12, №34 и значение по оси Y у точки 5, вычисляем высоту по оси Z
         */


        /// <summary>
        /// Функция корректирует высоту по оси Z
        /// </summary>
        /// <param name="p1">первая точка первой линии X</param>
        /// <param name="p2">вторая точка первой линии X</param>
        /// <param name="p3">первая точка второй линии X</param>
        /// <param name="p4">вторая точка второй линии X</param>
        /// <param name="p5">точка у которой нужно скорректировать высоту</param>
        /// <returns></returns>
        public static dobPoint GetZ(dobPoint p1, dobPoint p2, dobPoint p3, dobPoint p4, dobPoint p5)
        {
            dobPoint p12 = CalcPX(p1, p2, p5);
            dobPoint p34 = CalcPX(p3, p4, p5);

            dobPoint p1234 = CalcPY(p12, p34, p5);

            return(p1234);
        }
        //нахождение высоты Z точки p0, лежащей на прямой которая паралельна оси X
        public static dobPoint CalcPX(dobPoint p1, dobPoint p2, dobPoint p0)
        {
            dobPoint ReturnPoint = new dobPoint(p0.X, p0.Y, p0.Z, 0);

            ReturnPoint.Z = p1.Z + (((p1.Z - p2.Z) / (p1.X - p2.X)) * (p0.X - p1.X));

            //TODO: учесть на будущее что точка 1 и 2 могут лежать не на одной паралльной линии оси Х
            ReturnPoint.Y = p1.Y;

            return(ReturnPoint);
        }
        private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int x = e.ColumnIndex - 1;
            int y = e.RowIndex - 1;

            if (x < 0 || y < 0)
            {
                selectedPoint = null;

                selectedX = -1;
                selectedY = -1;
            }
            else
            {
                selectedPoint = new dobPoint(dataCode.matrix2[x, y].X, dataCode.matrix2[x, y].Y, dataCode.matrix2[x, y].Z, 0);
                selectedX     = x;
                selectedY     = y;
            }
        }