1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define N 10
int transmitance(double lx, double ly, double x, double y);
double sommeReelle(double lx, double ly, double pas, double X, double Y, double constante);
double sommeImmaginaire(double lx, double ly, double pas, double X, double Y, double constante);
int main()
{
double X[N], Y[N], I[N][N];
double x, y;
double lx, ly;
int i, j;
double pas =1;
double f, lamda;
double constante = (2*M_PI)/(lamda*f);
FILE *fp;
for(i=0;i<=N;i++) //discrétisation des axes X et Y
{
X[i]=-N/2+i*pas;
Y[i]=X[i];
}
fp = fopen("intensite.data","w");
printf("Entrez lx et ly:");
scanf("%lf %lf",&lx,&ly);
printf("Entrez lamda et f:");
scanf("%lf %lf",&lamda,&f);
for(i=0;i<=N;i++)
{
for(j=0;j<=N;j++)
{
I[i][j]=pow(sommeReelle(lx,ly,pas,X[i],Y[j],constante),2)+pow(sommeImmaginaire(lx,ly,pas,X[i],Y[j],constante),2);
fprintf(fp,"%lf %lf %lf \n",X[i],Y[j],I[i][j]);
}
}
fclose(fp);
return 0;
}
int transmitance(double lx, double ly, double x, double y)
{
int valeurTransmitance = 0;
if( (x<=lx/2)&&(x>=-lx/2)&&(y<=ly/2)&&(y>=-ly/2) )
valeurTransmitance = 1;
return valeurTransmitance;
}
double sommeReelle(double lx, double ly, double pas, double X, double Y, double constante)
{
int x, y;
double somme = 0;
for(x=-N/2;x<=N/2;x+=pas)
{
for(y=-N/2;y<=N/2;y+=pas);
{
somme=somme+pas*pas*transmitance(lx,ly,x,y)*cos(constante*(x*X+y*Y));
}
}
return somme;
}
double sommeImmaginaire(double lx, double ly, double pas, double X, double Y, double constante)
{
int x, y;
double somme = 0;
for(x=-N/2;x<=N/2;x+=pas)
{
for(y=-N/2;y<=N/2;y+=pas)
{
somme=somme+pas*pas*transmitance(lx,ly,x,y)*sin(constante*(x*X+y*Y));
}
}
return somme;
} |
Partager