Sie sind auf Seite 1von 11

Un programa de trazado de rayos

F. Javier Gil Chica


junio, 2010

Resumen
Se presenta un programa de trazado de rayos en el que hemos
querido poner en práctica algunas ideas no habituales ni en los cursos
de óptica geométrica ni en otros programas similares.

1. Introducción
La ley de Snell es el primer tópico que se encuentra en cualquier texto de
Óptica geométrica. A continuación, se suelen estudiar los sistemas paraxiales.
En muchos de los textos populares, el tratamiento es ”clásico” y se resuelve
por trigonometrı́a elemental. En otros se adopta el tratamiento matricial,
mucho más potente y sencillo. Mientras que en los textos del primer tipo la
sencillez de la trigonometrı́a queda oscurecida por la necesidad de adoptar
un embarazoso criterio de signos, en el segundo suele omitirse la discusión
de este extremo: se propone un rayo sobre el que se hace la discusión y
se acepta que el resultado obtenido es válido para los demás rayos. Y casi
siempre, el trazado de rayos queda como un ejercicio costoso, ya que no añade
nada al tratamiento analı́tico. Hemos comprobado además que la mayorı́a de
los programas de trazado de rayos se limitan a representar gráficamente los
resultados paraxiales, de forma que las aberraciones son invisibles.

Por todos estos motivos, hemos desarrollado nosotros el programa que


describimos, y que tiene como objetivos fundamentales: 1) desarrollar un
trazado de rayos basado en la ley de Snell; apto por consiguiente fuera
de las condiciones paraxiales; 2) eliminar cualquier ambigüedad de signos,
efectuando los cálculos por un procedimiento completamente analı́tico. En
la implementación del programa, esto significa que no habrá condicionales
if...else...endif, o que el procedimiento de cálculo es independiente del
tipo de superficie, de que la normal se encuentra por encima o por debajo del

1
eje, de que respecto a la normal el rayo incidente se encuentre por arriba o
por debajo y de que el rayo pase de un medio a otro con ı́ndice de refracción
mayor, o viceversa; 3) Obtener una salida gráfica de alta calidad. Algunos
programas de trazado de rayos se limitan a la obtención de un listado de
coordenadas y se delega luego en algún programa externo (como una hoja
de cálculo), para que realice la representación. Nosotros queremos generar
código PostScript para obtener una representación en alta calidad tanto del
sistema óptico como del trazado del rayo o los rayos.

Nuestro programa puede extenderse sin dificultad para que incluya tan-
to superficies esféricas como asféricas, centradas o no, además de elementos
como diafragmas o espejos. Sin embargo, mantendremos la exposición nota-
blemente más clara limitándonos a sistemas esféricos centrados.

2. Suposiciones
Supondremos por tanto que tenemos sistemas ópticos centrados, compues-
tos por superficies esféricas cóncavas o convexas. Aquı́ introduciremos el único
convenio necesario: que el radio de las superficies convexas es positivo, mien-
tras que el de las superficies cóncavas es negativo. Suponemos que la luz se
propaga de izquierda a derecha y que situamos el origen de tal forma que el
sistema se encuentra en el semiplano x > 0. Suponemos que las superficies
separan regiones ópticamente homogéneas e isótropas. Suponemos que los
centros de las superficies que forman el sistema se encuentran todos en el
eje x. El sistema de referencia se completa con los ejes y y z, formando un
sistema dextrógiro donde si x, y y z son los vectores unitarios según los ejes,
entonces x × y = z.

3. Elementos analı́ticos
3.1. Ley de Snell
Denotaremos mediante i1 al ángulo de incidencia, y mediante i2 al de
refracción, respecto a la normal a la superficie en el punto en que incide el
rayo de luz, siendo n1 el ı́ndice de refracción a la izquierda de la superficie y
n2 el ı́ndice a la derecha. Como es sabido, la ley de Snell establece que

n1 sin i1 = n2 sin i2 (1)

2
3.2. Representación de un rayo
Un rayo queda determinado por un punto (x0 , y0 ) y una dirección, dada
por un vector unitario u de componente (u, v). Si r̄ es el vector de posición
del punto (x0 , y0 ) y s̄ el de un punto contenido en la recta determinada por
éste y por u, entonces existe un escalar λ que hace s̄ = r̄ + λu. Resolviendo
en componentes y eliminando λ se obtiene la recta y = a + bx con b = v/u y
a = y0 − x0 b.

3.3. Intersección de la recta con la circunferencia


Las intersecciones de una recta y = a + bx con la circunferencia de centro
(c, 0) y radio r vienen determinadas por una ecuación de segundo grado
Ax2 + Bx + C = 0, donde

A = 1 + b2
B = 2(ba − c)
C = c2 + a2 − r 2 (2)

y su número, ninguna, una o dos, dependerá del valor del discriminante.

4. Propagación del rayo


Dado un rayo determinado por el punto (x0 , y0 ) y el vector unitario u,
entendemos por propagarlo calcular su intersección (x, y) con la siguiente
superficie que se encuentra a su derecha, y el nuevo vector unitario u′ que
determina la nueva dirección una vez refractado el rayo. En relación con
la figura 1, p es el punto origen (x0 , y0 ) y n es la intersección (x, y) con
la superficie
q esférica convexa. De modo que u = (x − x0 , y − y0 )/r, siendo
r = (x − x0 )2 + (y − y0 )2 . r es el vector unitario que apunta al centro de la
circunferencia. Obsérvese que si la superficie elegida hubiese sido la cóncava,
siendo el radio negativo, tendriamos que r apuntarı́a en dirección contraria
al centro, y ocurrirı́a en ambos casos que u.r > 0.

El ángulo de incidencia viene dado por

cos i1 = u.r (3)

3
q

n
u u’
r s
p
t

Figura 1

y el ángulo de refracción, si n1 es el ı́ndice de refracción a la izquierda de


la superficie y n2 a la derecha, viene dado por
n1
sin i2 = sin i1 (4)
n2

Tenemos por tanto que u′ se obtiene girando en sentido anti-horario el


vector r un ángulo i2 .

5. Reducción a uno sólo de todos los casos


posibles
Pueden darse a priori ocho casos, según que: 1) la refracción se produzca
sobre una superficie cóncava o convexa; 2) que sea u × r = αz o u × r = −αz
y 3) que la incidencia se produzca en el semiplano y > 0 o en el semiplano
y <= 0. En cuatro de estos casos se requiere un giro anti-horario de r, y
en otros cuatro un giro horario. Por tanto, los ocho casos a priori quedan
reducidos a dos. El giro en sentido horario se requiere cuando u × r = αz, y
el giro anti-horario cuando u × r = −αz.

4
Estos dos casos se reducen a uno sólo si se adopta como matriz de giro la
siguiente:
 
cos i2 w sin i2
G=


 (5)
−w sin i2 cos i2

donde

(u × r)
w= = ±1 (6)
|u × r|

En el caso de la figura 1, w = −1, y entonces la matriz G representa un giro


anti-horario. El nuevo vector de dirección que junto con el punto intersección
determina la nueva trayectoria es entonces

u′ = G(i2 )r (7)

Puede suceder que se dé reflexión total. En ese caso, es fácil comprobar que
la nueva dirección se obtiene girando la dirección original un ángulo π − 2i1 ,
y que el criterio de si el giro es en sentido horario o anti-horario se sigue
manteniendo, es decir

u′ = G(π − 2i1 )u (8)

6. Algoritmo
El algoritmo de trazado se compone los siguientes pasos

1. Dado un punto inicial y una dirección:

2. Calcular su intersección con la superficie siguiente. Si las dos intersec-


ciones se producen por delante del punto inicial, determinar la correcta
consultando el radio: si es positivo la superficie es convexa, y se to-
mará la intersección de coordenada x más pequeña; si es negativo, la
superficie es cóncava, y se tomará la intersección con coordenada x ma-
yor. Si sólo una de las intersecciones tiene coordenada x mayor que el
punto inicial, se tomará ésta.

3. De las coordenadas del punto inicial y de la intersección, calcular el


vector u.

5
4. Calcular el vector r = (c − p)/r, donde c son las coordenadas del
centro de la superficie, p las del punto intersección y r el radio (con su
signo) de la superficie. Si la superficie no es esférica, basta dividir por
el módulo de c − p
5. Calcular el ángulo de incidencia a partir de cos i1 = u.r
6. Calcular i2 a partir de la ley de Snell
7. Calcular w a partir de u × r
8. Calcular la nueva dirección u′ = G(i2 )r
9. Si existen más superficies por delante, tomar la intersección encontrada
y el vector u′ como valores iniciales y volver al paso primero. Si la
refracción calculada es la última, encontrar un punto perteneciente a
la recta determinada por (x, y) y u′ y tomarlo como el punto final de
la trayectoria del rayo. Por ejemplo, si el rayo intersecta al eje puede
prolongarse hasta esta intersección, o hasta un valor determinado de la
coordenada x.

7. Representación interna de los datos


7.1. Superficies esféricas y trayectoria
Hemos desarrollado el programa en lenguaje C. Usamos la palabra real
para referirnos a datos de tipo double, para lo cual especificamos al inicio
del programa
#define real double

Basta cambiar double por float para usar precisión simple.

El sistema se representa mediante un vector de elementos de tipo real. Si


hay n superficies, entonces dicho vector contiene 4n + 2 elementos, distribui-
dos de la forma siguiente:
1. Un primer valor donde se especifica el número de superficies
2. Para cada superficie, un cuarteto de valores que representan, por este
orden: el ı́ndice de refracción a la izquierda de la superficie, el vértice
de la superficie (coordenada x de su intersección con éste eje), el radio
de la superficie y el diámetro del elemento (máxima altura a la que un
rayo puede incidir sobre él).

6
3. Un último valor que contiene el ı́ndice de refracción a la derecha de la
última superficie

La trayectoria del rayo se representa por una matriz de cuatro filas y, si


hay n superficies, n + 2 columnas. Cada columna contiene las coordenadas
(x, y) de un punto de la trayectoria y las componentes (u, v) del vector u.
La primera columna contiene las coordenadas y la dirección del punto de
partida del rayo. Las siguientes n columnas contienen la intersección del rayo
con cada superficie y la dirección tras su refracción en esa superficie. La
última columna contiene un punto obtenido prolongando el rayo que emerge
de la última superficie.

7.2. Otros elementos


Otros elementos pueden ser especificados: diafragmas, superficies planas,
superficies asféricas. En ese caso, los elementos del sistema pueden ser espe-
cificados por secuencias de longitud variable (p. ej. para especificar un plano
perpendicular al eje óptico sólo es relevante la coordenada x, pero para es-
pecificar una superficie elı́ptica necesitamos las coordenadas del centro y los
dos semiejes). No avanzaremos, de momento, en esa lı́nea.

7.3. Detalles de implementación


Algunas cosas han de ser tenidas en cuenta a efectos de implementación.
La primera es decidir qué hacer con aquellos rayos que no intersectan
con la superficie próxima. En ese caso, el rayo se propaga según su dirección
hasta la coordenada x del centro de esa superficie, manteniendo el vector u.
Con esta decisión, se previene el caso de que por contra si pudiese incidir en
otra superficie distinta, posterior.
La segunda es qué hacer con los rayos que sufren reflexión total. Estos ra-
yos serán descartados. No los prolongamos según la dirección que corresponda
porque no serı́a una suposición realista. Como un rayo puede ser descartado,
será preciso mantener un contador que indique la última superficie en que fue
refractado, de forma que al menos hasta ella pueda seguirse su trayectoria.
La tercera es si considerar o no la posibilidad de una tangencia exacta
en una superficie. No consideraremos ese caso. Lo que significa que una tan-
gencia exacta se trata como el caso en que el rayo no intersecta la superficie.
Matemáticamente, exigimos la desigualdad estricta B 2 − 4AC > 0.

7
8. Resultados
El programa genera salida en PostScript encapsulado, que puede enviarse
directamente a la impresora o incorporarse a un documento. Si se trata de
un documeto LATEX, es preciso declarar

\usepackage[dvips]{graphicx}

Insertamos a continuación algunas de las figuras que hemos obtenido:

Figura 2

La figura ha sido rotada y escalada, de ahı́ que aparezca cierto pixela-


do. Cuando la salida PostScript es enviada directamente a la impresora, se
obtiene una impresión de gran calidad, en tamaño A4 y formato apaisado.

8
9. Conclusiones
La formulación matricial de la óptica paraxial es sencilla y potente, pero
el salto desde ahı́ a la teorı́a general es dificultoso, y pueden ser útiles herra-
mientas de cálculo analı́tico de rayos que permitan visualizar toda la gama
de las aberraciones, cromáticas o no.

Nuestro programa es muy sencillo: apenas 300 lı́neas de código y un ejecu-


table tan ligero que pesa sólo 7 kB. Permite el trazado de rayos individuales
o de haces de rayos, y la especificación de sistemas de un número arbitrario
de superficies. Puede manejar igualmente bien haces monocromáticos o haces
donde cada rayo se propaga según un ı́ndice de refracción distinto.

Por su estructura, permite generalizaciones que no hemos considerado in-


teresantes (de momento), como la introducción de diafragmas o superficies
no esféricas o sistemas no centrados.

Para nosotros ha resultado gratificante contemplar los trazados de rayos


en un formato gráfico de alta calidad, ya que, aparte del interés técnico que
pueda o no tener este sencillo programa, los resultados son cuando menos
agradables a la vista.

9
Figura 3

10
Figura 4

11

Das könnte Ihnen auch gefallen