# Difracción Fraunhofer producida por una abertura rectangular y circular

#  | ## Movimiento ondulatorio

    Interferencia y
    difracción
    Tubo de Quincke
    Interferencia de las
    ondas producidas
    por dos fuentes (I)
    Interferencia de las
    ondas producidas
    por dos fuentes (II)
    Interferencia de las
    ondas producidas
    por varias fuentes
    Difracción producida
    por una rendija
    Interferencia más
    difracción
    Difracción abertura
    rectangular y circular
    Difracción de Fresnel
|  | Difracción producida por una abertura rectangular Difracción producida por una abertura circular Referencias Código fuente
En una página previa, hemos estudiado la difracción Fraunhofer producida por una rendija estrecha y larga. En la teoría de la difracción Fraunhofer, se supone que las ondas incidentes son normales al plano de la rendija, y que el observador se encuentra a una distancia grande en comparación con las dimensiones del obstáculo. En esta página, se muestra la difracción producida por una abertura rectangular y por una abertura circular. La deducción de las fórmulas de la intensidad debida a la difracción está fuera del propósito de este Curso Interactivo y se recomienda consultar el libro citado en las referencias. En los applets de las páginas anteriores, la intensidad se ha codificado en colores de la escala de grises. Los pixels (puntos) del área de trabajo del applet se han coloreado del siguiente modo: Se asigna el color blanco a un píxel que registra la máxima intensidad. El color negro cuando registra una intensidad nula. A una intensidad intermedia, le corresponde un color de la escala de grises comprendido entre el blanco y el negro. En los dos applets de esta página, se simula que se toma una fotografía del obstáculo iluminado, con una exposición grande para registrar algunos de los detalles más débiles. Tomando la intensidad I(0) máxima registrada en el origen como la unidad, se asigna el color blanco a un píxel que registre una intensidad igual o superior a 0.01. el color negro, si registra una intensidad cero, un color de la escala de grises entre el blanco y el negro, si la intensidad es mayor que cero y menor que 0.01. ## Difracción producida por una abertura rectangular En la figura, se muestra el obstáculo, una abertura rectangular de lados a y b y un punto P situado en una pantalla a una distancia R del obstáculo de coordenadas x e y. La expresión de la intensidad I(x, y) registrada en el punto P debida a la difracción de ondas planas de longitud de onda λ por el obstáculo, es Donde I(0) es la intensidad registrada en el origen x=0, y=0 de la pantalla ### Actividades Se introduce La longitud del lado b, en el control de edición titulado Lado b La longitud del lado a, se ha fijado en a=1.0 Se pulsa el botón titulado Dibuja

> ## Difracción producida por una abertura circular En la figura, se muestra el obstáculo, una abertura circular de radio a, y un punto P situado en una pantalla a una distancia R del obstáculo. La recta que une el centro del círculo y el punto, forma un ángulo θ con el eje Z. La expresión de la intensidad I(x, y) registrada en el punto P debido a la difracción de ondas planas de longitud de onda λ por el obstáculo, es Donde I(0) es la intensidad registrada en el origen de la pantalla Jn(α) es la función de Bessel de orden n. Máximos y mínimos Los máximos de intensidad se producen cuando Las funciones de Bessel tiene la siguiente relación de recurrencia Aplicando esta propiedad a la función J1(α) Se concluye que los máximos secundarios de intensidad son los ceros de la función de Bessel J2(α). J2(α)=0 Los mínimos de intensidad son los ceros de la función de Bessel J1(α). J1(α)=0 Ahora bien J1(α) presenta un cero para α=0, y este corresponde a un máximo de intensidad, ya que En la siguiente tabla, se proporcionan los primeros ceros de las funciones de Bessel J1(x) y J2(x).
> J1(x) | J2(x)
> 3.8317 | 5.1356
> 7.0156 | 8.4172
> 10.1735 | 11.6198
> 13.3237 | 14.7960
> 16.4706 | 17.9598
> 196159 | 21.1170
> 22.7601 | 24.2701
> 25.9037 | 27.4206
> 29.0468 | 30.5692
> 32.1897 | 33.7165
Fuente: Puig Adam P., Curso teórico-práctico de ecuaciones diferencias aplicado a la Física y Técnica. Biblioteca Matemática (1950).pág. 156. ### Actividades Se pulsa el botón titulado Dibuja

## Referencias

Hecht E., Zajac A. Óptica. Addison-Wesley Iberoamericana (1977), págs. 369-379

Press W. H., Teukolsky S. A., Vetterling W. T., Flannery B. P. Numerical Recipes in C, Second edition, Special functions. Bessel functions of integer order Chapter 6º. pp. 230. Cambridge University Press. Código en C adaptado por el autor al lenguaje Java

##

## Código fuente

    public abstract class Raiz {
    	private final double CERO=1e-10;
    	private final double ERROR=0.0001;
    	private final int MAXITER=100;
    	protected final int MAXRAICES=20;
    	protected double raices[]=new double[MAXRAICES];
    	protected int iRaiz=0;

    protected double puntoMedio(double a, double b)throws RaizExcepcion{
    	double m, ym;
    	int iter=0;
    	do{
    		m=(a+b)/2;
    		ym=f(m);
    		if(Math.abs(ym)<CERO) break;
    		if(Math.abs((a-b)/m)<ERROR) break;
    		if((f(a)*ym)<0) b=m;
    		else a=m;
    		iter++;
    	}while(iter<MAXITER);
    	if(iter==MAXITER){
    		throw new RaizExcepcion("No se ha encontrado una raíz");
    	}
    	return m;
    }

    private void explorar(double xIni, double xFin, double dx){
    	double y1, y2;
    	iRaiz=0;
    	y1=f(xIni);
    	for(double x=xIni; x<xFin; x+=dx){
    		y2=f(x+dx);
    //Uno de los extremos del intervalo es raíz
    		if(Math.abs(y1)<CERO && iRaiz<MAXRAICES){
    			raices[iRaiz++]=x;
    			y1=y2;
    			continue;
    		}
    //no hay raíz en este intervalo
    		if(y1*y2>=0.0){
    			y1=y2;
    			continue;
    		}
    //hay una raíz en este intervalo
    		if(iRaiz<MAXRAICES){
    			try{
    				raices[iRaiz]=puntoMedio(x, x+dx);
    				iRaiz++;
    			}catch(RaizExcepcion ex){
    				System.out.println(ex.getMessage());
    			}
    		}
    		y1=y2;
    	}
    }

    public double[] hallarRaices(double ini, double fin, double paso){
    	explorar(ini, fin, paso);
    	double solucion[]=new double[iRaiz];
    	for(int i=0; i<iRaiz; i++){
    		solucion[i]=(double)Math.round(raices[i]*1000)/1000;
    	}
    	return solucion;
    }

    abstract protected double f(double x);
    }

    class RaizExcepcion extends Exception {
    	public RaizExcepcion(String s) {
    	super(s);
    }
    }
    public class Maximos extends Raiz {

    protected double f(double x){
    	return bessj1(x);
    }

    private double bessj1(double x){
    //Returns the Bessel function J1(x) for any real x.
    	double ax,z;
    	double xx,y,ans,ans1,ans2; //Accumulate polynomials in double precision.
    	if ((ax=Math.abs(x)) < 8.0) { //Direct rational approximation.
    		y=x*x;
    		ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1+y*(-2972611.439+
    			y*(15704.48260+y*(-30.16036606))))));
    		ans2=144725228442.0+y*(2300535178.0+y*(18583304.74+y*(99447.43394+y*(376.9991397+y*1.0))));
    		ans=ans1/ans2;
    	} else { //Fitting function (6.5.9).
    		z=8.0/ax;
    		y=z*z;
    		xx=ax-2.356194491;
    		ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4+y*(0.2457520174e-5+y*(-0.240337019e-6))));
    		ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5+
    		y*(-0.88228987e-6+y*0.105787412e-6)));
    		ans=Math.sqrt(0.636619772/ax)*(Math.cos(xx)*ans1-z*Math.sin(xx)*ans2);
    		if (x < 0.0) ans = -ans;
    	}
    	return ans;
    }
    }
    public class Minimos extends Raiz {

    protected double f(double x){
    	return bessj0(x);
    }

    private double bessj0(double x){
    //Returns the Bessel function J0(x) for any real x.
    	double ax,z;
    	double xx,y,ans,ans1,ans2; //Accumulate polynomials in double precision.
    	if ((ax=Math.abs(x)) < 8.0) { //Direct rational function t.
    		y=x*x;
    		ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7+y*(-11214424.18+y*(77392.33017+
    		y*(-184.9052456)))));
    		ans2=57568490411.0+y*(1029532985.0+y*(9494680.718+y*(59272.64853+y*(267.8532712+y*1.0))));
    		ans=ans1/ans2;
    	} else { //Fitting function (6.5.9).
    		z=8.0/ax;
    		y=z*z;
    		xx=ax-0.785398164;
    		ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6)));
    		ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+
    		y*(0.7621095161e-6-y*0.934935152e-7)));
    		ans=Math.sqrt(0.636619772/ax)*(Math.cos(xx)*ans1-z*Math.sin(xx)*ans2);
    	}
    	return ans;
    }
    }
    public class Difraccion {

    public static void main(String[] args) {
    	double[] raices=new Maximos().hallarRaices(0.0, 30.0, 1.0);
    	System.out.print("Máximos");
    	for(int i=0; i<raices.length; i++){
    		System.out.print(" "+raices[i]);
    	}
    	System.out.println("");
    	raices=new Minimos().hallarRaices(0.0, 30.0, 1.0);
    	System.out.print("Mínimos");
    	for(int i=0; i<raices.length; i++){
    		System.out.print(" "+raices[i]);
    	}
    }
    }