Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <stdio.h>
- using namespace std;
- int main(){
- const float lambda=0.6328;
- const int r=0;
- int n, m; // размер маÑÑива, надо ÑопоÑтавить Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ и горизонтальным размером плаÑтинки
- float k = 16 * atan(1) / lambda; // К = 4Пи/лÑмбда, допиÑать длину волны
- float alpha; // допиÑать угол наклона
- float deltax=520*2; // допиÑать дельта икÑ
- float *A1,*A2,*Rq0, *A1a, *A2a; // маÑÑив Ð1(x, y), Ñчитывание данных (надо из файла)
- unsigned char *mask,*mask2; // Создаем динамичеÑкие маÑÑивы (Создали указатель на облаÑÑ‚ÑŒ памÑти)
- FILE *file; // Указатель на файл
- file=fopen("A9a.wf","rb"); // Открываем файл
- if (file==NULL) // Ðварийное завершение программы в Ñлучае, еÑли файл не открываетÑÑ
- return 1;
- fread(&n,4,1,file); // Считываем из файла (Указатель на переменную, количеÑтво байт в одном Ñлементе, количеÑтво Ñлементов, откуда Ñчитывать)
- fread(&m,4,1,file); // -//-
- A1=new float [n*m]; // ВыделÑем памÑÑ‚ÑŒ под динамичеÑкий маÑÑив амплитуд
- A2=new float [n*m]; // -//-
- Rq0=new float [n*m]; // -//- Среднеквадратичное отклонение
- A1a=new float [n*m];
- A2a=new float [n*m];
- mask=new unsigned char [n*m]; // -//-
- mask2=new unsigned char [n*m]; // -//-
- fread(A1,4,n*m,file); // Считываем
- fread(mask,1,n*m,file); // Считываем
- fclose(file); // Закрыли файл
- file=fopen("A10a.wf","rb");
- if (file==NULL)
- return 1;
- fseek(file,8,SEEK_SET); // Сдвиг ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² файле
- fread(A2,4,n*m,file);
- fread(mask2,1,n*m,file);
- fclose(file);
- for (int i=0;i<n*m;i++)
- mask[i]|=mask2[i]; // Объединили маÑки
- cin >> alpha;
- for (int i=0; i<n; i++) {
- for (int j=0; j<m; j++) {
- if (!mask[j*n + i]) {
- float sum = 0;
- int N = 0;
- for (int x=i-r; x<=i+r; x++) {
- for (int y=j-r; y<=j+r; y++) {
- if (x>=0 && y>=0 && x<n && y<m && !mask[y*n + x] && (x-i)*(x-i) + (y-j)*(y-j) <= r*r) {
- sum+=A1[y*n + x];
- N++;
- }
- }
- }
- A1a[j*n + i] = sum / N;
- }
- }
- }
- for (int i=0; i<n; i++) {
- for (int j=0; j<m; j++) {
- if (!mask[j*n + i]) {
- float sum = 0;
- int N = 0;
- for (int x=i-r; x<=i+r; x++) {
- for (int y=j-r; y<=j+r; y++) {
- if (x>=0 && y>=0 && x<n && y<m && !mask[y*n + x]) {
- sum+=A2[y*n + x];
- N++;
- }
- }
- }
- A2a[j*n + i] = sum / N;
- }
- }
- }
- for (int i = 0; i < n*m; i++)
- if (!mask[i]) {
- if (A2a[i]!=A1a[i]) {
- Rq0[i] = 2 * pow(k, -2) + (A1a[i] / (A2a[i] - A1a[i])) * pow(alpha, 2) * pow(deltax, 2) / 3;
- if (Rq0[i]>0)
- Rq0[i]=sqrt(Rq0[i]);
- else
- Rq0[i]=0;
- }
- else
- mask[i]=1;
- }
- file=fopen("Rq9a.wf","wb");
- if (file==NULL)
- return 1;
- fwrite(&n,4,1,file);
- fwrite(&m,4,1,file);
- fwrite(Rq0,4,n*m,file);
- fwrite(mask,1,n*m,file);
- fclose(file);
- delete [] A1;
- delete [] A2;
- delete [] A1a;
- delete [] A2a;
- delete [] mask;
- delete [] mask2;
- delete [] Rq0;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement