ÓPTICA CON TRAZADO ANALÍTICO DE RAYOS
POR: JUAN ANDRES LEON
CONTENIDO:
A pesar de su arcaicidad conceptual, la óptica geométrica, desarrollada en el Siglo XVII, continúa siendo hoy una herramienta práctica muy importante en el estudio de sistemas ópticos. La analogía que puede hacerse entre este sistema analítico con la física clásica en lo que respecta a que ambos desprecian los efectos ondulatorios , en un caso de la teoría electromagnética (clásica o cuántica), en otro de la mecánica cuántica, va más allá de las apariencias, y de hecho ambas aproximaciones tienen el mismo origen teórico: La aproximación para sistemas varios ordenes de magnitud superiores a las longitudes de onda aplicadas (ya sea de fotones o de partículas materiales).
De hecho, hoy en día para el estudio y diseño de lentes, espejos y sistemas ópticos, la principal herramienta es la óptica geométrica, complementada en lo relevante por perturbaciones provenientes de la naturaleza ondulatoria de la luz (difracción, dispersión, etc.).
La única prevención fundamental que hay que tener en cuenta al manejar este estilo analítico es por supuesto la inexistencia de los "rayos" o "chorros de partículas" en que se creía en el momento del desarrollo de las teorías, siendo lo apropiado pensar en los rayos trazados como representaciones de los frentes de onda de una fuente en un punto determinado. Fuera de esto, las predicciones obtenidas son las mismas que se obtendrán por medio de la teoría electromagnética para una onda monocromática en el rango de frecuencias de luz visible. De hecho, el incómodo principio de Fermat del que puede derivarse toda la teoría y que tanta reacción adversa genera por su violación de la causalidad (¿cómo "ve" la luz cuál es el camino óptico óptimo? ¿Obteniendo información que viaja a una velocidad infinita?), es uno de los principales conceptos del punto de vista de Feynman para el desarrollo de la Electrodinámica Cuántica.
La óptica geométrica es entonces una exacta aplicación de la más precisa teoría que se ha conseguido en la física.
Los programas de trazado de rayos son un importante campo de la ingeniería óptica y como puede apreciarse con una simple búsqueda de Internet, los hay de gran sofisticación y con precios en los miles de dólares.
Mi proyecto consistió en utilizar los más simples conceptos de la óptica geométrica para desarrollar un programa de trazado de rayos, que los manejase de forma analítica pero individualmente de manera que se pudiera lograr predicciones más confiables que las fórmulas generales deducibles bajo fuertes restricciones de paraxialidad.
Como herramientas teóricas sólo se necesita la ley de Snell para casos de refracción y la ley de reflexión. Computacionalmente, aunque en principio una tarea fácil, se requiere de un buen trabajo de planeación y de la aplicación de algunas herramientas de análisis.
El paquete compilado consta de seis ejecutables ("rayo.exe", "angular.exe","para.exe, "conv.exe", "paraconv.exe" y "figura.exe") que ejecutan diversas rutinas para analizar un sistema óptico que se describe y modifica desde "lentes.dat". El programa "figura.exe" además requiere de un archivo "figura.dat", que describe una figura cualquiera en coordenadas cartesianas para ser analizada por el sistema óptico (obtener su imagen).
A continuación describo los programas como unidades terminadas, dejando para más adelante la descripción de su funcionamiento interno y las instrucciones precisas de su utilización.
"RAYO.EXE"
Este programa, que es el núcleo del proyecto, obtiene la trayectoria de un rayo completamente especificado por el usuario, a través de un sistema óptico que en principio no tiene restricciones de complejidad, aunque está restringido a simetría cilíndrica (que es lo corriente para la mayoría de sistemas ópticos). Como salida se obtiene la especificación analítica de cada segmento del rayo en pantalla, y un archivo "out.txt" que contiene un trazado numérico de todo el recorrido y que puede ser inmediatamente dibujado con cualquier programa graficador (en mi caso, EXCEL).
"ANGULAR.EXE".
Este programa, que contiene en su interior la rutina de "RAYO.EXE", ejecuta un barrido angular de rayos desde un punto especificado por el usuario (quien escoge además cuántos rayos quiere enviar y la apertura angular máxima) y traza sus recorridos analíticamente. Como salida entrega además de las especificaciones de cada segmento de recorrido para cada rayo, un archivo "out.txt" que contiene el trazado numérico de todos los rayos, para que el resultado pueda ser graficado inmediatamente.
"PARA.EXE"
Muy similar a "ANGULAR", este programa ejecuta un barrido no angular sino traslacional de rayos paralelos, pudiendo el usuario especificar la inclinación de éstos y localización espacial. Como en el caso anterior se obtienen las especificaciones de los segmentos de cada uno de los rayos, y un archivo "out.txt" con los datos numéricos listos para ser graficados.
"CONV.EXE"
Esta es una pequeña modificación de "ANGULAR" que hace lo mismo y además encuentra el punto de convergencia de los rayos. Entrega como "ANGULAR" los parámetros de cada uno de los rayos componentes, y además la coordenada del punto de convergencia y con qué tan nítido es éste (desviación estándar). El archivo numérico incluye un trazado hasta el punto de convergencia para cada rayo.
"PARACONV.EXE".
Es el homólogo de "CONV" para el caso del programa "PARA".
"FIGURA.EXE"
Este programa ejecuta las operaciones necesarias para obtener la imagen de un objeto extenso a través de un sistema óptico. Debido a la gran cantidad de datos que maneja, devuelve nada a la pantalla sino a dos archivos. En "out.txt" están los datos necesarios para graficar todas las trayectorias utilizadas para el cálculo de la figura (que pueden ser bastantes). En "figout.txt" el programa devuelve las coordenadas que forman la nueva figura y además repite los datos de la original, de manera que un programa graficador muestre el objeto y su imagen. Al lado de cada nueva coordenada también indica la nitidez de ésta.
DESCRIPCION INTERNA DE LOS PROGRAMAS
(Favor referirse a las hojas donde está impreso el archivo fuente).
El programa "RAYO", que es en realidad casi todo el trabajo analítico del proyecto, está en estructura basado en parte en un aparte de un libro de texto de Física (Ver Bibliografía).
En las líneas 1-40 básicamente se cargan todos los datos de entrada que necesita el programa, tanto del archivo descriptor del espacio "lentes.dat" como del usuario.
Como el programa debe guardar un registro de cada rayo que se va produciendo, hay un arreglo "rayos" que guarda los parámetros que se irán generando. Las demás variables son de uso transitorio en la obtención de estos datos. Inicialmente (líneas 44-46) se guardan los parámetros del rayo inicial.
Las líneas 48-74 contienen el núcleo operacional del programa. En este se van generando los nuevos rayos a partir de las leyes de la óptica y se guardan sus parámetros descriptores en el arreglo "rayos". Aunque matemáticamente eran sólo necesarios dos parámetros (pendiente e intersección) para cada recta, preferí usar tres descriptores (origen z, origen r, ángulo) que hacen más intuitivo el programa, y hacen más fácil la creación de los rayos en cada superficie.
Con cada rayo, esta subrutina pasa en orden superficie por superficie (ese es el ciclo for). En cada superficie el programa primero encuentra las coordenadas de la intersección entre esta y el rayo incidente (líneas 56-57). A partir de este punto calcula la pendiente de la superficie en ese lugar (58), y ejecuta las funciones que entregan los ángulos de refracción y reflexión que tendrá un rayo en dicha superficie. A continuación se graba en "rayos" las coordenadas del punto de intersección, que serán el origen del nuevo rayo, y el ángulo que corresponde al tipo de superficie (1=interfaz, 2=espejo). Eso es todo.
Cuando ha efectuado el ciclo para todas las superficies, el programa se encarga de entregar los resultados, tanto en pantalla como al archivo según expliqué anteriormente.
LAS FUNCIONES UTILIZADAS
Las demás funciones son minucias concernientes con signos y cambios de marco de referencia para el tratamiento de los ángulos de reflexión y refracción.
LIMITACIONES CONOCIDAS
Aunque traté de hacer un programa lo más útil posible, hay que tener en cuenta ciertas limitaciones que si bien podrían haberse corregido, habrían implicado cambios estructurales demasiado serios al programa por la manera en que fue pensado. Para los problemas ópticos que está diseñado tampoco debería ser grave, pues los fenómenos que no tiene en cuenta son generalmente indeseables.
LOS OTROS PROGRAMAS
Como puede verse fácilmente, el núcleo del programa RAYO se encuentra en todos los demás. Los programas PARA y ANGULAR simplemente operan RAYO varias veces, cada vez con un rayo diferente, que obtienen de manera muy trivial del usuario y de operaciones aritméticas básicas.
CONV y PARACONV contienen un elemento extra de importancia analítica: luego de ser idénticos a ANGULAR Y PARA, calculan el punto de convergencia de todos los rayos. Para ello, hacen un promedio de todos los puntos de convergencia de los rayos resultantes. (Ver líneas 81-96(conv) y 85-99(paraconv)). Obtienen de paso la desviación estándar de este promedio, que dará una idea de la nitidez de la imagen. Al trazar numéricamente los rayos en el archivo de salida, extienden cada rayo resultante hasta el punto de convergencia (puede verse raro cuando se trata de una imagen virtual).
FIGURA es una ejecución secuencial de CONV para la serie de puntos especificados por el archivo de entrada "figura.dat". Guarda cada punto de convergencia encontrado en el archivo de salida, junto con la figura original, a partir de lo cual se podrá reconstruir en un programa graficador la imagen obtenida.
Antes de efectuar cualquiera de los programas, es necesario especificar en este archivo los parámetros básicos de cada una de las superficies que se encontrará un rayo a su camino.
El primer número que debe tener el archivo especifica el índice de refracción "de fondo", en que comienzan los rayos.
El segundo número especifica el número total de superficies que hay. Habría formas de programar que no requirieran de este dato pero simplifica mucho las operaciones y en todo caso es muy difícil equivocarse en esto.
A continuación se encuentra la tabla de valores, que especifica todas las superficies.
La primera columna indica la distancia del origen a que se encuentra la superficie.
La segunda columna indica la curvatura de la superficie: Curvatura=1/radio (para círculos en todas partes, para las demás cónicas en coordenada r = 0. Una curvatura negativa es cóncava a la izquierda, y positiva lo es hacia la derecha. Cero define una superficie plana.
La tercera columna es lo que llaman "factor de forma" ("Shape Factor"), que define qué tipo de cónica se desea: 1 = Círculo, 0 = parábola. Valores negativos generan hipérbolas y positivos elipsoides.
La cuarta columna define el índice de refracción que hay al otro lado de la superficie (para espejos, es recomendable poner el índice del medio en que venía en rayo.
La última columna define si se trata de un espejo o de una interfaz. 1= interfaz, 2= espejo. De acuerdo con esta información el programa sabrá si debe refractar o reflejar el rayo incidente.
RECOMENDACIONES: Como ya avisé anteriormente, es importante tabular las superficies en el orden en que se irán encontrando por el rayo generado. Es bueno tener una idea de las dimensiones de las superficies antes de introducirlas ciegamente, pues puede suceder si no se tiene cuidado que los rayos no se encuentren nunca con las superficies, o que debido a diferentes curvaturas dos superficies que inicialmente tienen una secuencia, se intersecan para quedar con orden diferente en lo concerniente a orden de incidencia. La parte fraccionaria de un número debe estar separada por un punto.
Una vez especificado el archivo "lentes.dat" se puede proceder a los programas.
Aunque no es necesario para nada, es bueno especialmente para RAYO, ANGULAR y PARA añadir luego de todas las superficies necesarias una superficie plana (C=0) de manera que al graficar se puedan ver los rayos que resultan del sistema óptico. Para los programas CONV, PARACONV e IMAGEN es menos útil pues éstos ya hacen un trazado al punto de convergencia.
2. RAYO
Cuando se ejecuta RAYO, el programa pregunta al usuario los parámetros iniciales del rayo: coordenada r, coordenada z y el ángulo en grados de inclinación de ese rayo. El programa devuelve los parámetros de todos los rayos que hay en la trayectoria (incluyendo inicial y final), y el archivo con el trazado numérico.
EJEMPLO: Lente Convergente
Vamos a analizar un simple lente convergente: Dos semiesferas de radio 5 cm separadas medio centímetro en su eje central. El vidrio tiene índice de refracción 1.5. Se encuentra a 7cm del origen.
En el archivo "lentes.dat" ponemos los datos, incluyendo una superficie más lejos para graficar mejor los datos resultantes.
1
3
7 0.2 1 1.5 1
7.5 -0.2 1 1 1
20 0 1 1 1
A continuación ejecutamos RAYO. Respondemos por ejemplo 0 0 5 respecto a las condiciones iniciales.
D:\Jal\trabajos 011>rayo
Entre por favor los datos del rayo:
<coordenadas iniciales r,z, e inclinacion en grados
0 0 5
R Z angulo(rad)
0.000000 0.000000 0.087266
0.615750 7.038060 0.016442
0.622706 7.461072 -0.038173
0.143823 20.000000 -0.038173
Entrando a EXCEL, obtengo la siguiente gráfica
:
Podemos repetir por ejemplo para la misma configuración con diferentes ángulos y coordenadas iniciales. Eso sí, los resultados en todo caso no son tan impresionantes como los que veremos para los otros programas. No hay que olvidar que sin embargo todos los demás se basan en este primero.
PARA al ejecutarse pide las coordenadas del rayo que partirá de la mitad del barrido, su ángulo de inclinación, la amplitud traslacional máxima del barrido, y el número total de rayos.
Vamos a ejecutar de nuevo usando nuestro sistema de lentes de los ejemplos anteriores.
Le decimos al programa que el rayo central parta de 0 0, que tenga una inclinación de 3, que sean 6 rayos, y que la amplitud máxima sea 1
El programa devuelve en pantalla algo muy similar en estructura que ANGULAR (aunque con datos muy diferentes). La gráfica se presenta en la página siguiente:
Como hemos podido ver, en algunos casos los programas PARA y ANGULAR son un poco incómodos en que los rayos al graficarse continúan hasta la última superficie especificada, siendo esto a veces muy lejos del área de interés. Además, aunque parecen darnos unos lugares de convergencia de los rayos, no sabemos ni su localización exacta ni su nitidez. Para ello se utilizarán CONV y PARACONV.
Primero que todo es bueno (aunque no imperativo) hacer una pequeña modificación en "lentes.dat". Eliminamos la última línea y disminuimos correspondientemente el número de superficies a dos.
Ejecutamos ahora CONV, utilizando los mismos datos de entrada que en el ejemplo de ANGULAR. El programa además de los listados de rayos, nos entrega al final lo siguiente:
Coordenadas promedio del punto de convergencia: z:23.972912 r:-0.000000
Desviacion estandar del punto de convergencia: 0.556148
El programa nos dice en qué punto en promedio se encontraron los rayos, y la desviación respecto a ese punto (en este caso una mala imagen).
La gráfica es bastante mejor proporcionada que la de ANGULAR. (Aunque ANGULAR a veces tiene ventajas sobre CONV).
Para ahorrar espacio y en vista de lo similar que es PARACONV, simplemente muestro aquí el resultado de hacer un barrido de rayos paralelos a nuestro sistema de lentes, con inclinación 0 (no es igual a lo hecho en PARA):
Coordenadas promedio del punto de convergencia: z:12.248749 r:0.000000
Desviacion estandar del punto de convergencia: 0.114656
5. FIGURA
Finalmente miremos lo que pasa con el programa FIGURA. Para poder utilizarlo hay que tener previamente guardado en el mismo directorio un archivo "figura.dat". Una vez se tiene la figura y está especificado el archivo "lentes.dat", solamente hay que ejecutar el programa.
El archivo "figura.dat" debe tener como primer dato el número de puntos que conforman el dibujo. Para este ejemplo voy a hacer un archivo muy simple, que contiene 11 puntos que se acomodan en z = 0 abarcando de r = 1 hasta r = -1. Para FIGURA es innecesario como en CONV y PARACONV que haya una superficie final para dimensionar la gráfica, y por ello es preferible utilizar en "lentes.dat" sólo los que causan algún efecto.
11
0 1
0 0.8
0 0.6
0 0.4
0 0.2
0 0
0 -0.2
0 -0.4
0 -0.6
0 -0.8
0 -1
Al ejecutar FIGURA, el computador pregunta al igual que con ANGULAR y CONV, el número de rayos por punto de origen, y la amplitud angular máxima. En este caso pongo 4 rayos y amplitud de 1 (Dada la cantidad de operaciones de FIGURA, es bueno en lo posible restringir el número de rayos y poner ángulos pequeños, a menos que se esté interesado en analizar los datos de desviación estándar que entrega este programa en el archivo de salida "figout.txt". El archivo "out.txt" por lo general es tan denso en rayos que no tiene mucho valor más allá del simple análisis cualitativo.
"figout.dat" En cambio nos presenta un sobrio resultado:
Este ejemplo nos sirve de pasada para apreciar la inaceptable distorsión que presenta esta lente para objetos de las dimensiones de "figura.dat". Los puntos más alejados del eje z son enfocados a una distancia mucho menor que los que se encuentran muy cerca de este.
Lea, Susan M & Burke, J.R. "Physics, The Nature of Things". West Publishing Company, St. Paul MN, 1997.
Hecht, Eugene. "Optica". Tercera Edición, Addison Wesley Iberoamericana, Madrid 2000.
Para finalizar, ilustro algunos ejemplos interesantes y que pueden desarrollarse con este paquete de programas.
TELESCOPIO CASSEGRAIN (Usando PARACONV)
Coordenadas promedio del punto de convergencia: z:6.440658 r:-0.
Desviacion estandar del punto de convergencia: 0.023207
ESPEJO PARABÓLICO (Usando PARACONV)
Coordenadas promedio del punto de convergencia: z:6.000000 r:-0.000000
Desviacion estandar del punto de convergencia: 0.000000
LUPA (usando FIGURA; Ver diferencias en escala vertical y horizontal. En este caso la aberración es muy poca y la amplificación notoria. La imagen es virtual)
TELESCOPIO REFRACTOR CON OCULAR: (usando PARA)
MICROSCOPIO SIMPLE: (Usando ANGULAR; magnificación angular = 8.75)
MICROSCOPIO SIMPLE (Usando FIGURA: Altura figura original: 0.01)
MISMO ANTERIOR-
FIN DEL MANUAL
PARA BAJAR EL PROGRAMA HAGA CLICK AQUI:
(Este paquete contiene todos los programas descritos arriba, fuente y compilados, ademas de algunos archivos .dat que representan figuras o sistemas opticos)
Si el usuario quiere, puede modificar este paquete sin que por ello yo me vaya a sentir insultado.
- Si el archivo ZIP no está bajando correctamente, intente desactivar cualquier programa facilitador como Download Accelerator, etc -