//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; } }