public static double[,] AddIntersectionsY(double[,] structure, double[] yCut) { double m; double xNew; double[,] finalContours = structure; for (int y = 0; y < yCut.Length; y++) { double[,] contours = finalContours; int numConts = finalContours.Length / 3; int numAdded = 1; //start at one, increment after adding each point, to keep track of where to add next additional point (add to index) //index 0 outside of loop: if ((contours[0, 1] > yCut[y]) & (contours[contours.Length / 3 - 1, 1] < yCut[y])) { m = (contours[0, 1] - contours[contours.Length / 3 - 1, 1]) / (contours[0, 0] - contours[contours.Length / 3 - 1, 0]); xNew = ((yCut[y] - contours[contours.Length / 3 - 1, 1]) / m) + contours[contours.Length / 3 - 1, 0]; finalContours = ContourFixing.AddPoint(finalContours, 0, new double[] { xNew, yCut[y], contours[0, 2] }); numAdded++; } if ((contours[0, 1] < yCut[y]) & (contours[contours.Length / 3 - 1, 1] > yCut[y])) { m = (contours[contours.Length / 3 - 1, 1] - contours[0, 1]) / (contours[contours.Length / 3 - 1, 0] - contours[0, 0]); xNew = ((yCut[y] - contours[0, 1]) / m) + contours[0, 0]; finalContours = ContourFixing.AddPoint(finalContours, contours.Length / 3, new double[] { xNew, yCut[y], contours[0, 2] }); } for (int i = 1; i < numConts - 1; i++) //for all points, except last one will be out of loop { if ((contours[i, 1] < yCut[y]) & (contours[i + 1, 1] > yCut[y])) //if y is below the cut { m = (contours[i + 1, 1] - contours[i, 1]) / (contours[i + 1, 0] - contours[i, 0]); xNew = ((yCut[y] - contours[i, 1]) / m) + contours[i, 0]; finalContours = ContourFixing.AddPoint(finalContours, i + numAdded, new double[] { xNew, yCut[y], contours[0, 2] }); numAdded++; } else if ((contours[i, 1] > yCut[y]) & (contours[i + 1, 1] < yCut[y])) { m = (contours[i + 1, 1] - contours[i, 1]) / (contours[i + 1, 0] - contours[i, 0]); xNew = ((yCut[y] - contours[i, 1]) / m) + contours[i, 0]; finalContours = ContourFixing.AddPoint(finalContours, i + numAdded, new double[] { xNew, yCut[y], contours[0, 2] }); numAdded++; } } } return(finalContours); }
public static double[,] AddIntersectionsX(double[,] contours, double xCut) { double m; double yNew; double[,] finalContours = contours; int numAdded = 1; //start at one, increment after adding each point, to keep track of where to add next additional point (add to index) //index 0 outside of loop: if ((contours[0, 0] > xCut) & (contours[contours.Length / 3 - 1, 0] < xCut)) { m = (contours[0, 0] - contours[contours.Length / 3 - 1, 0]) / (contours[0, 1] - contours[contours.Length / 3 - 1, 1]); yNew = ((xCut - contours[contours.Length / 3 - 1, 0]) / m) + contours[contours.Length / 3 - 1, 1]; finalContours = ContourFixing.AddPoint(finalContours, 0, new double[] { xCut, yNew, contours[0, 2] }); numAdded++; } if ((contours[0, 0] < xCut) & (contours[contours.Length / 3 - 1, 0] > xCut)) { m = (contours[contours.Length / 3 - 1, 0] - contours[0, 0]) / (contours[contours.Length / 3 - 1, 1] - contours[0, 1]); yNew = ((xCut - contours[0, 0]) / m) + contours[0, 1]; finalContours = ContourFixing.AddPoint(finalContours, contours.Length / 3, new double[] { xCut, yNew, contours[0, 2] }); } for (int i = 0; i < contours.Length / 3 - 1; i++) //for all points, except last one will be out of loop { if ((contours[i, 0] < xCut) & (contours[i + 1, 0] > xCut)) //if x is below the cut { m = (contours[i + 1, 0] - contours[i, 0]) / (contours[i + 1, 1] - contours[i, 1]); yNew = ((xCut - contours[i, 0]) / m) + contours[i, 1]; finalContours = ContourFixing.AddPoint(finalContours, i + numAdded, new double[] { xCut, yNew, contours[0, 2] }); numAdded++; } else if ((contours[i, 0] > xCut) & (contours[i + 1, 0] < xCut)) { m = (contours[i + 1, 0] - contours[i, 0]) / (contours[i + 1, 1] - contours[i, 1]); yNew = ((xCut - contours[i, 0]) / m) + contours[i, 1]; finalContours = ContourFixing.AddPoint(finalContours, i + numAdded, new double[] { xCut, yNew, contours[0, 2] }); numAdded++; } } return(finalContours); }