Vous trouverez dans ces deux repertoires du code pour calculer la diffraction: un pour MATLAB, un en Python.
Le code Python est particulièrement simple: une somme d'onde sphérique, sur une ou plusieurs fentes de largeur sCoords
(la position y) et sAmplitudes
(l'amplitude complexe). On regarde sur un écran à une distance screenCoords
. C'est tout. Voici le code dans toute sa splendeur:
def diffraction(sCoords, sAmplitudes, k, r, screenCoords, progressMessage):
Efield=[0]*len(screenCoords) # Initialize with no field for a given r
for j,y_source in enumerate(sCoords):
A = sAmplitudes[j]
reportProgress(j,len(sCoords), progressMessage)
for i,y_screen in enumerate(screenCoords):
Ro = sqrt( (y_screen-y_source)**2 + r**2)
# we don't divide by r because we keep everything normalized
Efield[i] += A * exp(-I*k*Ro)
return Efield
Le code est d'une lenteur à faire peur. Une version qui fait appel aux transformées de Fourier discrètes sera essentiellement instantanée.
Ce code MATLAB extrêmement simple permet de visualiser la diffraction d'une fente carrée, circulaire ou arbitraire.
Trois choix de fentes: carrée, circulaire, abritraire. Trois "sliders": zoom in/out de l'image, intensité (pour mieux voir le contraste quitte à saturer) et grosseur de l'objet.
- Téléchargez le code ici en cliquant sur le bouton vert Clone or Download, ensuite Download zip.
- Ouvrir MATLAB
- Aller dans le repertoire où le code a été décompressé
- tapez guiDiffraction dans la console MATLAB
- Ajouter les échelles d'espace au niveau de la fente et du patron de diffraction
- Corriger l'interface qui a l'air d'avoir été fait par mon fils (Luc, 4 ans).
- Changer le lookup table pour avoir les images en spectrum
- Permettre de charger n'importe quel image, pas juste mon image arbitraire.
- Cotinuer le Unit Testing, qui est en cours de developpement.
- Completement refactoriser le code: sera fait après l'ajout du Unit Testing.
- Peut-etre en faire une version Python, puisque tout le monde utilise Python maintenant.