private static void Sort4(Form1.Coords[] X) { Form1.Coords[] R = new Form1.Coords[4]; //int min = int.MaxValue; //int max = int.MaxValue; for (int i = 0; i < 3; i++) // Сортировка методом всплывающего пузырька (В порядке возрастания) { for (int j = 0; j < 3; j++) { if (X[j].x > X[j + 1].x) { RVSR(ref X[j], ref X[j + 1]); } } } if (X[0].y > X[1].y) { RVSR(ref X[0], ref X[1]); // Сортировка по Y } if (X[2].y > X[3].y) { RVSR(ref X[2], ref X[3]); } }
public static ZArrayDescriptor Change_trapezium(ZArrayDescriptor zArrayDescriptor, Form1.Coords[] X) { Sort4(X); // int k = regComplex * 4; if (zArrayDescriptor == null) { MessageBox.Show(" Change_rectangle: zArrayDescriptor == null"); return(null); } int w1 = zArrayDescriptor.width; int h1 = zArrayDescriptor.height; int max_x = Max_x(X); int max_y = Max_y(X); ZArrayDescriptor zArray1 = new ZArrayDescriptor(max_x, max_y); for (int j = 0; j < max_y; j++) { for (int i = 0; i < max_x; i++) { Form1.Coords R1 = YYY(X[0], X[1], max_y, j); Form1.Coords R2 = YYY(X[2], X[3], max_y, j); double x = X[0].x + i; double y = Y(R1, R2, (int)x, max_y); int ix = (int)x; int iy = (int)y; //MessageBox.Show(" x " + x + " y " + y); if (iy < 0 || iy > h1) { continue; } if (ix < 0 || ix > w1) { continue; } zArray1.array[i, j] = zArrayDescriptor.array[ix, iy]; //zArray1.array[i, j] = Intens(zArrayDescriptor, x, y); } } return(zArray1); //MessageBox.Show(" max_x " + max_x + "max_y " + max_y); // if (iy < 0 || iy > h1) MessageBox.Show(" iy " + iy + " x= " + x + " y= " + y + " R1.y= " + R1.y + " R2.y= " + R2.y); // if (ix<0 || ix > w1) MessageBox.Show(" ix " + ix + " x= " + x + "y= " + y + " i= " + i + "j= " + j); // }
private static double Y(Form1.Coords X0, Form1.Coords X1, int xk, int max_y) { double yy = (X1.y - X0.y); double y; if (yy == 0) { y = X0.y; } else { y = (xk - X0.x) * ((X1.y - X0.y)) / (X1.x - X0.x) + X0.y; } return(y); }
// Нахождение Y по двум вершинам (max_x - максимальное число точек, ny - номер точки по Y) private static Form1.Coords YYY(Form1.Coords X0, Form1.Coords X1, int max_y, int ny) { Form1.Coords R; double xx = (X1.x - X0.x); double y, xk; if (xx == 0) { xk = X0.x; y = X0.y + (X1.y - X0.y) * ny / max_y; } else { xk = X0.x + xx * ny / max_y; y = (xk - X0.x) * ((X1.y - X0.y)) / xx + X0.y; } R.x = xk; R.y = y; return(R); }
/// <summary> /// /////////////////////////////////////////// Удаление трапеции /// </summary> /// <param name=""></param> /// <param name=""></param> /// <param name=""></param> /// <param name=""></param> /// private static void RVSR(ref Form1.Coords X, ref Form1.Coords Y) // Перестановка местами 2 структур { Form1.Coords R; R = X; X = Y; Y = R; }