Advertisement
pashaXMorder

xce

Feb 13th, 2021
550
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.   const float lambda=0.6328;
  9.   const int r=0;
  10.   int n, m; // размер массива, надо сопоставить с вертикальным и горизонтальным размером пластинки
  11.   float k = 16 * atan(1) / lambda; // К = 4Пи/лямбда, дописать длину волны
  12.   float alpha; // дописать угол наклона
  13.   float deltax=520*2; // дописать дельта икс
  14.   float *A1,*A2,*Rq0, *A1a, *A2a; // массив А1(x, y), считывание данных (надо из файла)
  15.   unsigned char *mask,*mask2; // Создаем динамические массивы (Создали указатель на область памяти)
  16.   FILE *file; // Указатель на файл
  17.    
  18.   file=fopen("A9a.wf","rb"); // Открываем файл
  19.   if (file==NULL) // Аварийное завершение программы в случае, если файл не открывается
  20.     return 1;
  21.   fread(&n,4,1,file); // Считываем из файла (Указатель на переменную, количество байт в одном элементе, количество элементов, откуда считывать)
  22.   fread(&m,4,1,file); // -//-
  23.   A1=new float [n*m]; // Выделяем память под динамический массив амплитуд
  24.   A2=new float [n*m]; // -//-
  25.   Rq0=new float [n*m]; // -//- Среднеквадратичное отклонение
  26.   A1a=new float [n*m];
  27.   A2a=new float [n*m];
  28.   mask=new unsigned char [n*m]; // -//-
  29.   mask2=new unsigned char [n*m]; // -//-
  30.   fread(A1,4,n*m,file); // Считываем
  31.   fread(mask,1,n*m,file); // Считываем
  32.   fclose(file); // Закрыли файл
  33.   file=fopen("A10a.wf","rb");
  34.   if (file==NULL)
  35.     return 1;
  36.   fseek(file,8,SEEK_SET); // Сдвиг указателя положения в файле
  37.   fread(A2,4,n*m,file);
  38.   fread(mask2,1,n*m,file);
  39.   fclose(file);
  40.   for (int i=0;i<n*m;i++)
  41.     mask[i]|=mask2[i]; // Объединили маски
  42.   cin >> alpha;
  43.  
  44.   for (int i=0; i<n; i++) {
  45.       for (int j=0; j<m; j++) {
  46.           if (!mask[j*n + i]) {
  47.               float sum = 0;
  48.               int N = 0;
  49.               for (int x=i-r; x<=i+r; x++) {
  50.                   for (int y=j-r; y<=j+r; y++) {
  51.                       if (x>=0 && y>=0 && x<n && y<m && !mask[y*n + x] && (x-i)*(x-i) + (y-j)*(y-j) <= r*r) {
  52.                           sum+=A1[y*n + x];
  53.                           N++;
  54.                       }
  55.                   }
  56.               }
  57.               A1a[j*n + i] = sum / N;
  58.           }
  59.       }
  60.   }
  61.  
  62.   for (int i=0; i<n; i++) {
  63.       for (int j=0; j<m; j++) {
  64.           if (!mask[j*n + i]) {
  65.               float sum = 0;
  66.               int N = 0;
  67.               for (int x=i-r; x<=i+r; x++) {
  68.                   for (int y=j-r; y<=j+r; y++) {
  69.                       if (x>=0 && y>=0 && x<n && y<m && !mask[y*n + x]) {
  70.                           sum+=A2[y*n + x];
  71.                           N++;
  72.                       }
  73.                   }
  74.               }
  75.               A2a[j*n + i] = sum / N;
  76.           }
  77.       }
  78.   }
  79.  
  80.  
  81.   for (int i = 0; i < n*m; i++)
  82.     if (!mask[i])  {
  83.         if (A2a[i]!=A1a[i])  {
  84.             Rq0[i] = 2 * pow(k, -2) + (A1a[i] / (A2a[i] - A1a[i])) * pow(alpha, 2) * pow(deltax, 2) / 3;
  85.             if (Rq0[i]>0)
  86.                 Rq0[i]=sqrt(Rq0[i]);
  87.             else
  88.                 Rq0[i]=0;
  89.         }
  90.         else
  91.             mask[i]=1;
  92.     }
  93.   file=fopen("Rq9a.wf","wb");
  94.   if (file==NULL)
  95.     return 1;
  96.   fwrite(&n,4,1,file);
  97.   fwrite(&m,4,1,file);
  98.   fwrite(Rq0,4,n*m,file);
  99.   fwrite(mask,1,n*m,file);
  100.   fclose(file);
  101.   delete [] A1;
  102.   delete [] A2;
  103.   delete [] A1a;
  104.   delete [] A2a;
  105.   delete [] mask;
  106.   delete [] mask2;
  107.   delete [] Rq0;
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement