/// <summary>
        /// Суммирование строк в массиве от 0 до h1
        /// </summary>
        /// <param name="zArray"></param>
        /// <returns></returns>
        public static ZArrayDescriptor Sum_zArrayY_ALL(ZArrayDescriptor zArray)
        {
            if (zArray == null)
            {
                MessageBox.Show(" Sum_zArrayY: zArrayDescriptor == null"); return(null);
            }
            int w1 = zArray.width;
            int h1 = zArray.height;

            ZArrayDescriptor res_array = new ZArrayDescriptor(w1, h1);

            double[] array_line = new double[w1];

            for (int i = 0; i < w1; i++)
            {
                for (int j = 0; j < h1; j++)
                {
                    array_line[i] += zArray.array[i, j];
                }
            }

            for (int i = 0; i < w1; i++)
            {
                for (int j = 0; j < h1; j++)
                {
                    res_array.array[i, j] = array_line[i] / h1;
                }
            }

            return(res_array);
        }
示例#2
0
        // Конструктор для заполнения фазы (Амплитуда постоянная)

        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy, double am)
        {
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZComplexDescriptor == NULL"); return;
            }

            width  = descriptorToCopy.width;
            height = descriptorToCopy.height;
            array  = new Complex[width, height];

            double max = SumClass.getMax(descriptorToCopy);
            double min = SumClass.getMin(descriptorToCopy);

            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    double a = descriptorToCopy.array[i, j];
                    a           = (a - min) * 2.0 * Math.PI / (max - min);
                    a           = a - Math.PI;
                    array[i, j] = Complex.FromPolarCoordinates(am, a);

                    //array[i, j] = new Complex(1.0, descriptorToCopy.array[i, j]);
                }
            }
        }
//------------------------------------------------------------------------------------------------------------------------
        //Random rnd = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);

        //                double fa = (0.5- rnd.NextDouble() )* Math.PI * noise;   //rnd.NextDouble() 0-1


        public static ZArrayDescriptor Model_FAZA(double n, double noise)
        {
            int NX = 1024;
            int NY = 1024;
            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            Random rnd = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);

            // Random rnd = new Random();
            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = (i % n);
                    fz1 = fz1 * 2 * Math.PI / (n);
                    double fa = (0.5 - rnd.NextDouble()) * fz1 * noise;   //rnd.NextDouble() 0-1
                    fz1 = fz1 + fa;
                    //if (fz1 > 2 * Math.PI) fz1 = 2 * Math.PI;  //fz1 - 2 * Math.PI;
                    //if (fz1 < 0)           fz1 = 0;            // + 2 * Math.PI;
                    cmpl.array[i, j] = fz1;
                }
            }

            return(cmpl);
        }
        // Конструктор array из  zArray
        // если изображение меньше чем  Nx,  Ny, то оно помещается в левый угол, если изображение больше, то оно обрезается
        //
        public ZArrayDescriptor(ZArrayDescriptor zArrayPicture, int Nx, int Ny, int k)
        {
            if (zArrayPicture == null)
            {
                MessageBox.Show("zArrayPicture = NULL"); return;
            }
            if (k != 1)
            {
                MessageBox.Show(" ZArrayDescriptor k != 1"); return;
            }


            width  = Nx;
            height = Ny;
            array  = new double[Nx, Ny];
            int Nx_z = zArrayPicture.width;
            int Ny_z = zArrayPicture.height;

            Nx_z = Math.Min(Nx, Nx_z);
            Ny_z = Math.Min(Ny, Ny_z);

            for (int i = 0; i < Nx_z; i++)
            {
                for (int j = 0; j < Ny_z; j++)
                {
                    array[i, j] = zArrayPicture.array[i, j];
                }
            }
        }
        public static ZArrayDescriptor Model_FAZA_SUBN(ZArrayDescriptor z2, ZArrayDescriptor z3, double noise)
        {
            int NX = z2.width;
            int NY = z2.height;


            double n0 = -Math.PI * noise / 3;
            double n1 = 2 * Math.PI + Math.PI * noise / 3;


            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = (z2.array[i, j] - z3.array[i, j]);
                    if (fz1 < n0)
                    {
                        fz1 = fz1 + 2 * Math.PI;
                    }
                    if (fz1 > n1)
                    {
                        fz1 = fz1 - n1;
                    }
                    cmpl.array[i, j] = fz1;
                }
            }
            return(cmpl);
        }
        public static ZArrayDescriptor Model_FAZA_SUBA(ZArrayDescriptor z2, ZArrayDescriptor z3)
        {
            int NX = z2.width;
            int NY = z2.height;

            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = Math.Abs((z2.array[i, j] - z3.array[i, j]));
                    //if (fz1 < 0) fz1 = fz1 + 180;
                    cmpl.array[i, j] = fz1;
                }
            }
            double[,] a = new double[8, 8];
            a           = Model_VZ(8);
            for (int i = 0; i < 8; i++)
            {
                MessageBox.Show(" " + a[i, 0] + " " + a[i, 1] + " " + a[i, 2] + " " + a[i, 3] + " " + a[i, 4] + " " + a[i, 5] + " " + a[i, 6] + " " + a[i, 7]);
            }

            return(cmpl);
        }
        //---------------------------------------------------------------------------------------------------------------WB

        public static ZArrayDescriptor WB(double fz, double n_polos)
        {
            int NX = 1024;
            int NY = 1024;

            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            double a  = 255;
            double kx = 2.0 * Math.PI / NX;

            // a = (a - min) * 2.0 * Math.PI / (max - min);   -pi +pi


            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = Math.Sin(kx * i * n_polos + fz);
                    if (fz1 < 0)
                    {
                        a = 0;
                    }
                    else
                    {
                        a = 255;
                    }
                    cmpl.array[i, j] = a;
                }
            }

            return(cmpl);
        }
示例#8
0
        public static void Vizual_PictureAsRaw(ZArrayDescriptor zArrayDescriptor, PictureBox pictureBox)
        {
            int width  = zArrayDescriptor.width;
            int height = zArrayDescriptor.height;

            if (width == 0 || height == 0)
            {
                MessageBox.Show("Vizual_Picture: width == 0 || height == 0"); return;
            }

            Bitmap     bmp2  = new Bitmap(width, height);
            BitmapData data2 = ImageProcessor.getBitmapData(bmp2);

            for (int j = 0; j < width; j++)
            {
                for (int i = 0; i < height; i++)
                {
                    int c;

                    c = Convert.ToInt32(zArrayDescriptor.array[j, i]);

                    Color c1 = Color.FromArgb(c, c, c);
                    ImageProcessor.setPixel(data2, j, i, c1);
                }
            }

            pictureBox.Image = bmp2;
            bmp2.UnlockBits(data2);
        }
        // 4 синусоиды с фазовым сдвигом

        public static ZArrayDescriptor Sinus(double fz, double a, double n_polos, double gamma, int kr, int Nx, int Ny, double noise)
        {
            int kr1 = kr + 1;

            int NX = Nx * kr1;
            int NY = Ny * kr1;
            //MessageBox.Show(" nx " + NX + " a " + a + " noise " + noise);

            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            Random rnd = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);
            // Random rnd = new Random();

            double kx = 2.0 * Math.PI / NX;

            // a = (a - min) * 2.0 * Math.PI / (max - min);   -pi +pi


            for (int i = 0; i < NX; i += kr1)
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = a * (Math.Sin(kx * i * n_polos - fz) + 1) / 2;
                    //double fz1 = a * (Math.Sin(2.0 * Math.PI * i  / n_polos + fz) + 1) / 2;
                    double fa = (0.5 - rnd.NextDouble()) * a * noise;   //rnd.NextDouble() 0-1

                    fz1 = fz1 + fa;

                    cmpl.array[i, j] = Math.Pow(fz1, gamma);
                }
            }

            return(cmpl);
        }
        public void Stolb_a0(int i, int N2x, ZArrayDescriptor data2, int Ny, int NyP)
        {
            int N2 = 0;

            if (Ny > NyP)
            {
                N2 = (Ny - NyP) / 2;
                for (int j = 0; j < N2; j++)
                {
                    array[i, j] = 0;                          // 127;
                }
                for (int j = N2; j < Ny - N2; j++)
                {
                    array[i, j] = data2.array[i - N2x, j - N2];
                }
                for (int j = Ny - N2; j < Ny; j++)
                {
                    array[i, j] = 0;                                // 127;
                }
            }
            else
            {
                for (int j = 0; j < Ny; j++)
                {
                    array[i, j] = data2.array[i - N2x, j];
                }
            }
        }
示例#11
0
        //
        //                         Устранение фазовой неоднозначности
        //
        public static ZArrayDescriptor Shift_Picture(ZArrayDescriptor zArrayPicture, double o_gr, double o_mn)
        {
            if (zArrayPicture == null)
            {
                MessageBox.Show("SumClass ZArrayDescriptor array == null"); return(null);
            }
            int width  = zArrayPicture.width;
            int height = zArrayPicture.height;
            ZArrayDescriptor z_array = new  ZArrayDescriptor(width, height);
            double           max     = getMax(zArrayPicture);
            //double min = getMin(zArrayPicture);
            double min = o_mn;

            for (int j = 0; j < width; j++)
            {
                for (int i = 0; i < height; i++)
                {
                    double c = zArrayPicture.array[i, j];
                    if (c > o_gr)
                    {
                        c = min - (max - c);
                    }
                    z_array.array[i, j] = c;
                }
            }


            return(z_array);
        }
示例#12
0
        public static ZArrayDescriptor Range_Array1(ZArrayDescriptor zArrayPicture, double fmax)
        {
            if (zArrayPicture == null)
            {
                MessageBox.Show("SumClass ZArrayPicture == null"); return(null);
            }
            int width  = zArrayPicture.width;
            int height = zArrayPicture.height;
            ZArrayDescriptor rezult = new ZArrayDescriptor(width, height);

            double min = getMin(zArrayPicture);
            double max = getMax(zArrayPicture);

            if (max == min)
            {
                return(rezult);
            }

            double max1 = max - min;

            //MessageBox.Show("fmax1 = " + fmax);

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    double fc = zArrayPicture.array[i, j];

                    rezult.array[i, j] = fmax * (fc - min) / max1;
                }
            }
            return(rezult);
        }
示例#13
0
//-------------------------------------------------------------------------------------------------------------------------



        public static ZArrayDescriptor ATAN_am(ZArrayDescriptor[] zArrayPicture, double[] fzz)
        {
            // 8, 9, 10, 11   ->    Complex[1]

            int w1 = zArrayPicture[0].width;
            int h1 = zArrayPicture[0].height;

            ZArrayDescriptor faza = new ZArrayDescriptor(w1, h1);

            int n_sdv = 4;                                                       // Число фазовых сдвигов

            double[] i_sdv = new double[4];
            double[] v_sdv = new double[4];                                  // Вектор коэффициентов
            double[] k_sin = new double[4];
            double[] k_cos = new double[4];


            for (int i = 0; i < n_sdv; i++)
            {
                k_sin[i] = Math.Sin(fzz[i]);
                k_cos[i] = Math.Cos(fzz[i]);
            }


            for (int i = 0; i < w1; i++)
            {
                for (int j = 0; j < h1; j++)
                {
                    i_sdv[0] = zArrayPicture[0].array[i, j];
                    i_sdv[1] = zArrayPicture[1].array[i, j];
                    i_sdv[2] = zArrayPicture[2].array[i, j];
                    i_sdv[3] = zArrayPicture[3].array[i, j];

                    // ------                                     Формула расшифровки

                    v_sdv[0]         = i_sdv[1] - i_sdv[n_sdv - 1];
                    v_sdv[n_sdv - 1] = i_sdv[0] - i_sdv[n_sdv - 2];

                    for (int ii = 1; ii < n_sdv - 1; ii++)
                    {
                        v_sdv[ii] = i_sdv[ii + 1] - i_sdv[ii - 1];
                    }

                    double fz1 = 0;
                    double fz2 = 0;

                    for (int ii = 0; ii < n_sdv; ii++)
                    {
                        fz1 += v_sdv[ii] * k_sin[ii];
                        fz2 += v_sdv[ii] * k_cos[ii];
                    }


                    faza.array[i, j] = Math.Atan2(fz1, fz2);
                }
            }

            return(faza);
        }
示例#14
0
        // Конструктор для случайного заполнения фазы (RANDOM) (Амплитуда из файла, k=1)

        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy, ZArrayDescriptor amp, int k)
        {
            if (amp == null)
            {
                MessageBox.Show("Ampl == NULL");               return;
            }
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZArrayDescriptor   == NULL"); return;
            }
            if (k != 1)
            {
                MessageBox.Show(" k!=1 ");                     return;
            }

            width  = amp.width;
            height = amp.height;
            array  = new Complex[width, height];

            double max = SumClass.getMax(descriptorToCopy);
            double min = SumClass.getMin(descriptorToCopy);

            int NX = descriptorToCopy.width;
            int NY = descriptorToCopy.height;

            if (NX > width)
            {
                NX = width;
            }
            if (NY > height)
            {
                NY = height;
            }
            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));
            Random rnd = new Random();

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double am = amp.array[i, j];
                    double fz = descriptorToCopy.array[i, j];
                    double fa = rnd.NextDouble() * 2.0 * Math.PI - Math.PI;
                    fz = fz + fa;
                    //if (fz > Math.PI) fz = fz - Math.PI;
                    //if (fz < -Math.PI) fz = fz + Math.PI;
                    if (am <= 0)
                    {
                        fz = 0;                                       // По шаблону
                    }
                    //if (a > 0) a = rnd.NextDouble() *  Math.PI ; else a = 0;
                    array[i, j] = Complex.FromPolarCoordinates(am, fz);
                }
            }
        }
 public void SetImage(ZArrayDescriptor zArray)
 {
     this.imageBox.Invoke
     (
         (MethodInvoker) delegate
     {
         Vizual.Vizual_Picture(zArray, this.imageBox);
         this.imageBox.Refresh();
     }
     );
 }
        //--------------------------------------------------------------------------------------------------------------------
        // Конструктор array из  zArray
        // если изображение меньше чем  Nx,  Ny, то оно помещается в центре, а по краям 0
        // если изображение больше, то оно обрезается
        public ZArrayDescriptor(ZArrayDescriptor zArrayPicture, int Nx, int Ny)
        {
            if (zArrayPicture == null)
            {
                MessageBox.Show("zArrayPicture = NULL"); return;
            }


            width  = Nx;
            height = Ny;
            array  = new double[Nx, Ny];

            int NxP = zArrayPicture.width;
            int NyP = zArrayPicture.height;

            // MessageBox.Show("NX= " + Convert.ToString(Nx) + "Ny= " + Convert.ToString(Nx));
            // MessageBox.Show("NxP= " + Convert.ToString(NxP) + "NyP= " + Convert.ToString(NyP));

            int N2 = 0;

            if (Nx > NxP)
            {
                N2 = (Nx - NxP) / 2;
                for (int i = 0; i < N2; i++)
                {
                    for (int j = 0; j < Ny; j++)
                    {
                        array[i, j] = 0.0;
                    }
                }
                for (int i = N2; i < Nx - N2; i++)
                {
                    Stolb_a(i, N2, zArrayPicture, Ny, NyP);
                }
                for (int i = Nx - N2; i < Nx; i++)
                {
                    for (int j = 0; j < Ny; j++)
                    {
                        array[i, j] = 0.0;
                    }
                }
            }
            else
            {
                for (int i = 0; i < Nx; i++)
                {
                    Stolb_a(i, 0, zArrayPicture, Ny, NyP);
                }
            }
        }
示例#17
0
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Конструктор для заполения реальной части и мнимой части
        // k=0   Re
        // k=1   Im
        // k=2   re im=0
        // value.Real, value.Imaginary
        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy, ZComplexDescriptor a, int k)
        {
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZArrayDescriptor == NULL"); return;
            }
            if (a == null)
            {
                MessageBox.Show("ZComplexDescriptor == NULL"); return;
            }

            width  = a.width;
            height = a.height;

            int w1 = descriptorToCopy.width;
            int h1 = descriptorToCopy.height;

            MessageBox.Show("k= " + k + "width= " + width + "height = " + height + "w1 = " + w1 + "h1 = " + h1);


            if (w1 > width || h1 > height)
            {
                MessageBox.Show("ZComplexDescriptor.cs ZArrayDescriptor > ZComplexDescriptor"); return;
            }

            int x1 = (width - w1) / 2;
            int y1 = (height - h1) / 2;

            array = new Complex[width, height];
            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));

            for (int i1 = 0; i1 < w1; i1++)
            {
                for (int j1 = 0; j1 < h1; j1++)
                {
                    int i = i1 + x1;
                    int j = j1 + y1;
                    //Double c = descriptorToCopy.array[i, j];
                    if (k == 0)
                    {
                        array[i, j] = new Complex(descriptorToCopy.array[i1, j1], a.array[i1, j1].Imaginary);
                    }
                    if (k != 0)
                    {
                        array[i, j] = new Complex(a.array[i1, j1].Real, descriptorToCopy.array[i1, j1]);
                    }
                }
            }
        }
示例#18
0
        // Конструктор для заполнения амплитуды и фазы)

        public ZComplexDescriptor(ZArrayDescriptor phase, ZArrayDescriptor amp)
        {
            if (amp == null)
            {
                MessageBox.Show("Ampl  (ZComplexDescriptor)  == NULL"); return;
            }
            if (phase == null)
            {
                MessageBox.Show("Phase (ZComplexDescriptor)  == NULL"); return;
            }

            width  = amp.width;
            height = amp.height;

            int NX = phase.width;
            int NY = phase.height;

            if (NX > width)
            {
                NX = width;
            }
            if (NY > height)
            {
                NY = height;
            }
            if (NX < width)
            {
                width = NX;
            }
            if (NY < height)
            {
                height = NY;
            }

            array = new Complex[width, height];

            //double max = SumClass.getMax(phase);
            //double min = SumClass.getMin(phase);
            //MessageBox.Show("width =" + Convert.ToString(width) + "height =" + Convert.ToString(height));

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    array[i, j] = Complex.FromPolarCoordinates(amp.array[i, j], phase.array[i, j]);
                }
            }
        }
示例#19
0
        public static ZArrayDescriptor Re(ZComplexDescriptor zComplex)
        {
            int nx = zComplex.width;
            int ny = zComplex.height;
            ZArrayDescriptor amp1 = new ZArrayDescriptor(nx, ny);

            for (int i = 0; i < nx; i++)
            {
                for (int j = 0; j < ny; j++)
                {
                    amp1.array[i, j] = zComplex.array[i, j].Real;
                }
            }

            return(amp1);
        }
        public static ZArrayDescriptor Intensity2(double nu, int Nx, int Ny, int dx, double gamma) // От черного к белому
        {
            int Nx1 = Nx;

            Nx = Nx + dx * 2;

            ZArrayDescriptor cmpl = new ZArrayDescriptor(Nx, Ny);

            int k = (int)(Nx1 / (nu + 1));

            double[] ag = new double[Nx1];

            double max = double.MinValue;
            double min = double.MaxValue;

            for (int i = 0; i < Nx1; i++)
            {
                double a = Math.Pow(255 - i / k, gamma);
                ag[i] = a;
                if (a > max)
                {
                    max = a;
                }
                if (a < min)
                {
                    min = a;
                }
            }

            for (int i = 0; i < Nx1; i++)
            {
                ag[i] = (ag[i] - min) * nu / (max - min);
            }


            for (int j = 0; j < Ny; j++)
            {
                for (int i = 0; i < Nx1; i++)
                {
                    cmpl.array[i + dx, j] = ag[i];
                }
            }

            cmpl = Intens(0, 255, dx, cmpl);     // Белая и черная полоса по краям

            return(cmpl);
        }
        // Сложение с минимальным

        public static ZArrayDescriptor Model_FAZA_SUM(ZArrayDescriptor z1, ZArrayDescriptor z2, double n1)
        {
            int NX = z2.width;
            int NY = z2.height;
            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    cmpl.array[i, j] = z1.array[i, j] + z2.array[i, j] * n1;
                }
            }


            return(cmpl);
        }
//-----------------------------------------------------------------------------------------------------------------------------------
        public static ZArrayDescriptor DitheringVZ(double fz, double n_polos, int N_kvant, int N_urovn)  // Матрица возбуждения
        {
            int NX = 1024;
            int NY = 1024;

            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт
            double           kx   = 2.0 * Math.PI / NX;

            for (int i = 0; i < NX; i++)                                      // Приведение к числу уровней
            {
                for (int j = 0; j < NY; j++)
                {
                    double fz1 = (Math.Sin(kx * i * n_polos + fz) + 1) / 2;

                    int ifz1 = (int)(fz1 * N_urovn) + 1;
                    if (ifz1 > N_urovn)
                    {
                        ifz1 = N_urovn;                                      // Чтобы избежать sin=1
                    }
                    cmpl.array[i, j] = ifz1 - 1;
                }
            }

            int n = 8; // N_urovn / 32;

            double[,] D = new double[8, 8];
            D           = Model_VZ(8);

            for (int x = 0; x < NX; x++)                                     // Приведение к числу уровней
            {
                for (int y = 0; y < NY; y++)
                {
                    int i = (x % n);
                    int j = (y % n);
                    if (cmpl.array[x, y] / 4 < D[i, j])
                    {
                        cmpl.array[x, y] = 0;
                    }
                    else
                    {
                        cmpl.array[x, y] = 255;
                    }
                }
            }
            return(cmpl);
        }
示例#23
0
        public static ZArrayDescriptor Sub_zArray(ZArrayDescriptor a, ZArrayDescriptor b)
        {
            int w1 = a.width;
            int h1 = a.height;
            ZArrayDescriptor res_array = new ZArrayDescriptor(w1, h1);

            //double min = getMin(amp);

            for (int i = 0; i < w1; i++)    // По строкам
            {
                for (int j = 0; j < h1; j++)
                {
                    res_array.array[i, j] = a.array[i, j] - b.array[i, j];
                }
            }

            return(res_array);
        }
示例#24
0
        // Конструктор для заполнения реальной части и мнимой части = 0

        public ZComplexDescriptor(ZArrayDescriptor descriptorToCopy)
        {
            if (descriptorToCopy == null)
            {
                MessageBox.Show("ZArrayDescriptor == NULL"); return;
            }
            width  = descriptorToCopy.width;
            height = descriptorToCopy.height;
            array  = new Complex[width, height];

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    array[i, j] = new Complex(descriptorToCopy.array[i, j], 0.0);
                }
            }
        }
示例#25
0
        /// <summary>
        /// Суммирование строк в массиве от Y1 до Y2
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public static ZArrayDescriptor Sum_zArrayY(ZArrayDescriptor zArray, int y1, int y2)
        {
            if (zArray == null)
            {
                MessageBox.Show(" Sum_zArrayY: zArrayDescriptor == null"); return(null);
            }
            int w1 = zArray.width;
            int h1 = zArray.height;

            if (y2 < y1)
            {
                MessageBox.Show(" y2 < y1"); return(null);
            }
            if (y2 > h1)
            {
                MessageBox.Show(" y2 > h1"); return(null);
            }
            if (y1 < 0)
            {
                MessageBox.Show(" y1 < 0");  return(null);
            }

            ZArrayDescriptor res_array = new ZArrayDescriptor(w1, h1);

            double[] array_line = new double[w1];

            for (int i = 0; i < w1; i++)
            {
                for (int j = y1; j < y2; j++)
                {
                    array_line[i] += zArray.array[i, j];
                }
            }

            for (int i = 0; i < w1; i++)
            {
                for (int j = 0; j < h1; j++)
                {
                    res_array.array[i, j] = array_line[i] / (y2 - y1);
                }
            }

            return(res_array);
        }
示例#26
0
        public static ZArrayDescriptor Inversia(ZArrayDescriptor amp)
        {
            int w1 = amp.width;
            int h1 = amp.height;
            ZArrayDescriptor res_array = new ZArrayDescriptor(w1, h1);
            double           max       = getMax(amp);

            //double min = getMin(amp);

            for (int i = 0; i < w1; i++)    // По строкам
            {
                for (int j = 0; j < h1; j++)
                {
                    res_array.array[i, j] = (max - amp.array[i, j]);
                }
            }

            return(res_array);
        }
        public ZArrayDescriptor(ZArrayDescriptor descriptorToCopy)
        {
            if (descriptorToCopy == null)
            {
                MessageBox.Show("zArrayPicture = NULL"); return;
            }

            array  = new double[descriptorToCopy.width, descriptorToCopy.height];
            width  = descriptorToCopy.width;
            height = descriptorToCopy.height;

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    array[i, j] = descriptorToCopy.array[i, j];
                }
            }
        }
示例#28
0
        private static void Fill_Circle_Outside(ZArrayDescriptor zArrayDescriptor, BitmapData data2, int width, int height, Color c2)    // Заполнение цветом
        {
            Color c;
            Color red   = c2;
            Color green = Color.FromArgb(0, 0, 0);

            for (int j = 0; j < width; j++)
            {
                for (int i = 0; i < height; i++)
                {
                    c = ImageProcessor.getPixel(j, i, data2);
                    //if (c != red) ImageProcessor.setPixel(data2, j, i, green); else break;
                    if (c != red)
                    {
                        zArrayDescriptor.array[j, i] = 0;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            for (int j = 0; j < width; j++)
            {
                for (int i = height - 1; i >= 0; i--)
                {
                    c = ImageProcessor.getPixel(j, i, data2);
                    if (c == green)
                    {
                        continue;
                    }
                    // if (c != red ) ImageProcessor.setPixel(data2, j, i, green); else break;
                    if (c != red)
                    {
                        zArrayDescriptor.array[j, i] = 0;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
示例#29
0
        public static double getAverage(ZArrayDescriptor newDescriptor)
        {
            if (newDescriptor == null)
            {
                return(0);
            }


            double a = 0;

            for (int i = 0; i < newDescriptor.width; i++)
            {
                for (int j = 0; j < newDescriptor.height; j++)
                {
                    a = a + newDescriptor.array[i, j];
                }
            }
            a = a / (newDescriptor.width * newDescriptor.height);
            return(a);
        }
        // Вычитание двух профилей

        public static ZArrayDescriptor Model_FAZA_T(ZArrayDescriptor z1, ZArrayDescriptor z2, double n123, double n23)
        {
            int NX = z2.width;
            int NY = z2.height;
            ZArrayDescriptor cmpl = new ZArrayDescriptor(NX, NY);      // Результирующий фронт

            //double n123 = n12 * n23 / (Math.Abs(n12 - n23));
            for (int i = 0; i < NX; i++)
            {
                for (int j = 0; j < NY; j++)
                {
                    double rzn = z1.array[i, j] * n123 - z2.array[i, j] * n23;
                    int    k   = Convert.ToInt32(rzn / (Math.PI * n23)); //Convert.ToInt32
                    cmpl.array[i, j] = k * Math.PI * n23;
                }
            }


            return(cmpl);
        }