public static void Diapazon(double a1, double a2) // Привести к диапазону вещественный кадр { if (Form1.zArrayDescriptor[Form1.regImage] == null) { MessageBox.Show("Diapazon zArrayDescriptor[" + Form1.regImage + "] == NULL"); return; } int nx = Form1.zArrayDescriptor[Form1.regImage].width; int ny = Form1.zArrayDescriptor[Form1.regImage].height; //ZArrayDescriptor rez = new ZArrayDescriptor(nx, ny); double min = SumClass.getMin(Form1.zArrayDescriptor[Form1.regImage]); double max = SumClass.getMax(Form1.zArrayDescriptor[Form1.regImage]); for (int i = 0; i < nx; i++) { for (int j = 0; j < ny; j++) { double d = Form1.zArrayDescriptor[Form1.regImage].array[i, j]; Form1.zArrayDescriptor[Form1.regImage].array[i, j] = (d - min) * (a2 - a1) / (max - min) + a1; } } VisualRegImage(Form1.regImage); }
// Конструктор для заполнения фазы (Амплитуда постоянная) 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) (Амплитуда из файла, 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 static void Diapazon_С(double a1, double a2) // Привести к диапазону комплексный кадр { if (Form1.zComplex[Form1.regComplex] == null) { MessageBox.Show("Diapazon zComplex[" + Form1.regComplex + "] == NULL"); return; } int nx = Form1.zComplex[Form1.regComplex].width; int ny = Form1.zComplex[Form1.regComplex].height; ZArrayDescriptor rez = new ZArrayDescriptor(nx, ny); for (int i = 0; i < nx; i++) { for (int j = 0; j < ny; j++) { rez.array[i, j] = Form1.zComplex[Form1.regComplex].array[i, j].Magnitude; } } double min = SumClass.getMin(rez); double max = SumClass.getMax(rez); for (int i = 0; i < nx; i++) { for (int j = 0; j < ny; j++) { double d = rez.array[i, j]; rez.array[i, j] = (d - min) * (a2 - a1) / (max - min) + a1; } } ZComplexDescriptor rezc = new ZComplexDescriptor(Form1.zComplex[Form1.regComplex], rez); // Амплитуда в rez, фаза старая Form1.zComplex[Form1.regComplex] = rezc; ComplexPictureImage(Form1.regComplex); }
public static ZComplexDescriptor Model_SpSUB(double am, double Lambda, int NX, int NY, double dx, double d) { ZComplexDescriptor cmpl1 = Model_Sp(am, Lambda, NX, NY, dx, d); ZComplexDescriptor cmpl2 = Model_Sp1(am, Lambda, NX, NY, dx, d); ZArrayDescriptor sub = new ZArrayDescriptor(NX, NY); double s, s1; for (int i = 0; i < NX; i++) { for (int j = 0; j < NY; j++) { s = cmpl1.array[i, j].Phase; s1 = cmpl2.array[i, j].Phase; sub.array[i, j] = Math.Abs(s1 - s); } } double max = (SumClass.getMax(sub) - SumClass.getMin(sub)) / Math.PI; MessageBox.Show(" Разброс в PI = " + max); return(cmpl1); }