Пример #1
0
        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]);
            }
        }
Пример #2
0
        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);
            //
        }
Пример #3
0
        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);
        }
Пример #4
0
        // Нахождение 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);
        }
Пример #5
0
        /// <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;
        }