stringtranslate.com

B-spline racional no uniforme

Una curva NURBS. (Véase también: creación animada de una spline NURBS ).
Superficie NURBS sombreada en verde
Una superficie NURBS

La spline de base racional no uniforme ( NURBS ) es un modelo matemático que utiliza splines de base (B-splines) que se usa comúnmente en gráficos de computadora para representar curvas y superficies . Ofrece una gran flexibilidad y precisión para manejar formas tanto analíticas (definidas por fórmulas matemáticas comunes ) como modeladas . Es un tipo de modelado de curvas , a diferencia del modelado poligonal o la escultura digital . Las curvas NURBS se usan comúnmente en diseño asistido por computadora (CAD), fabricación (CAM) e ingeniería (CAE). Son parte de numerosos estándares de toda la industria, como IGES , STEP , ACIS y PHIGS . Las herramientas para crear y editar superficies NURBS se encuentran en varios paquetes de software de gráficos 3D , renderizado [1] y animación .

Pueden ser manejadas eficientemente por programas de computadora y al mismo tiempo permiten una fácil interacción humana. Las superficies NURBS son funciones de dos parámetros que se asignan a una superficie en un espacio tridimensional . La forma de la superficie está determinada por puntos de control . En una forma compacta, las superficies NURBS pueden representar formas geométricas simples . Para formas orgánicas complejas, las T-splines y las superficies de subdivisión son más adecuadas porque reducen a la mitad el número de puntos de control en comparación con las superficies NURBS.

En general, la edición de curvas y superficies NURBS es intuitiva y predecible. [ cita requerida ] Los puntos de control siempre están conectados directamente a la curva o superficie, o actúan como si estuvieran conectados por una banda elástica. Dependiendo del tipo de interfaz de usuario, la edición de curvas y superficies NURBS puede realizarse a través de sus puntos de control (similar a las curvas de Bézier ) o mediante herramientas de nivel superior como el modelado de splines y la edición jerárquica .

Historia

Un spline plano , el homónimo físico del spline matemático . Aquí el spline se mantiene en su lugar mediante pasadores en lugar de patines.

Antes de las computadoras, los diseños se dibujaban a mano en papel con diversas herramientas de dibujo . Se usaban reglas para líneas rectas, compases para círculos y transportadores para ángulos. Pero muchas formas, como la curva libre de la proa de un barco, no se podían dibujar con estas herramientas.

Aunque estas curvas se podían dibujar a mano alzada en la mesa de dibujo, los constructores navales a menudo necesitaban una versión de tamaño natural que no se podía hacer a mano. Estos dibujos de gran tamaño se hacían con la ayuda de tiras flexibles de madera, llamadas estrías. Las estrías se mantenían en su lugar en una serie de puntos predeterminados mediante "patos" de plomo, llamados así por la protuberancia en forma de pico contra la que descansaban las estrías. Entre los patos, la elasticidad del material de las estrías hacía que la tira adoptara la forma que minimizaba la energía de flexión, creando así la forma más suave posible que se ajustaba a las restricciones. La forma se podía ajustar moviendo los patos. [2] [3]

En 1946, los matemáticos comenzaron a estudiar la forma de spline y derivaron la fórmula polinómica por partes conocida como curva spline o función spline. IJ Schoenberg le dio a la función spline su nombre debido a su parecido con el spline mecánico utilizado por los dibujantes. [4]

A medida que se fueron introduciendo las computadoras en el proceso de diseño, se investigaron las propiedades físicas de dichas curvas para poder modelarlas con precisión matemática y reproducirlas cuando fuera necesario. El trabajo pionero lo realizaron en Francia el ingeniero de Renault Pierre Bézier y el físico y matemático de Citroën Paul de Casteljau . Trabajaron casi en paralelo, pero como Bézier publicó los resultados de su trabajo, las curvas de Bézier recibieron su nombre, mientras que el nombre de de Casteljau solo se asocia con algoritmos relacionados.

Al principio, las NURBS se utilizaban solo en los paquetes CAD propietarios de las empresas automovilísticas. Más tarde, pasaron a formar parte de los paquetes estándar de gráficos informáticos.

La representación interactiva en tiempo real de curvas y superficies NURBS se comercializó por primera vez en estaciones de trabajo Silicon Graphics en 1989. En 1993, CAS Berlin, una pequeña empresa emergente que coopera con la Technische Universität Berlin , desarrolló el primer modelador NURBS interactivo para PC, llamado NöRBS. [ cita requerida ]

Continuidad

Una superficie en construcción, por ejemplo el casco de un yate a motor, suele estar compuesta por varias superficies NURBS conocidas como parches NURBS (o simplemente parches ). Estos parches de superficie deben ajustarse entre sí de tal manera que los límites sean invisibles. Esto se expresa matemáticamente mediante el concepto de continuidad geométrica .

Existen herramientas de nivel superior que se benefician de la capacidad de las NURBS para crear y establecer continuidad geométrica de diferentes niveles:

La continuidad geométrica se refiere principalmente a la forma de la superficie resultante; dado que las superficies NURBS son funciones, también es posible analizar las derivadas de la superficie con respecto a los parámetros. Esto se conoce como continuidad paramétrica . La continuidad paramétrica de un grado determinado implica la continuidad geométrica de ese grado.

La continuidad paramétrica de primer y segundo nivel (C 0 y C¹) son, a efectos prácticos, idénticas a la continuidad posicional y tangencial (G 0 y G¹). Sin embargo, la continuidad paramétrica de tercer nivel (C²) difiere de la continuidad de curvatura en que su parametrización también es continua. En la práctica, la continuidad C² es más fácil de lograr si se utilizan B-splines uniformes.

La definición de continuidad C n requiere que las derivadas n- ésimas de curvas/superficies adyacentes ( ) sean iguales en una unión. [5] Nótese que las derivadas (parciales) de curvas y superficies son vectores que tienen una dirección y una magnitud; ambas deben ser iguales.

Los reflejos y las luces permiten obtener un alisado perfecto, algo que de otro modo sería prácticamente imposible de conseguir sin superficies NURBS que tengan al menos una continuidad G². Este mismo principio se utiliza como uno de los métodos de evaluación de superficies, por el que una imagen trazada por rayos o mapeada por reflexión de una superficie con rayas blancas reflejadas mostrará incluso las desviaciones más pequeñas en una superficie o un conjunto de superficies. Este método se deriva de la creación de prototipos de automóviles, en la que la calidad de la superficie se inspecciona comprobando la calidad de los reflejos de un techo de luces de neón sobre la superficie del automóvil. Este método también se conoce como "análisis de cebra".

Especificaciones técnicas

Una curva NURBS se define por su orden, un conjunto de puntos de control ponderados y un vector de nudos. [6] Las curvas y superficies NURBS son generalizaciones tanto de las B-splines como de las curvas y superficies de Bézier , siendo la principal diferencia la ponderación de los puntos de control, lo que hace que las curvas NURBS sean racionales .

( Las B-splines no racionales , también conocidas como simples , son un caso/subconjunto especial de las B-splines racionales, donde cada punto de control es una coordenada no homogénea regular [sin 'w'] en lugar de una coordenada homogénea . [7] Esto es equivalente a tener un peso "1" en cada punto de control; las B-splines racionales usan la 'w' de cada punto de control como peso . [8] )

Al utilizar una cuadrícula bidimensional de puntos de control, se pueden crear superficies NURBS que incluyen parches planos y secciones de esferas. Estas se parametrizan con dos variables (normalmente llamadas s y t o u y v ). Esto se puede ampliar a dimensiones arbitrarias para crear un mapeo NURBS .

Las curvas y superficies NURBS son útiles por varias razones:

Aquí, NURBS se analiza principalmente en una dimensión (curvas); puede generalizarse a dos (superficies) o incluso a más dimensiones.

Orden

El orden de una curva NURBS define la cantidad de puntos de control cercanos que influyen en cualquier punto dado de la curva. La curva se representa matemáticamente mediante un polinomio de grado uno menor que el orden de la curva. Por lo tanto, las curvas de segundo orden (que se representan mediante polinomios lineales) se denominan curvas lineales, las curvas de tercer orden se denominan curvas cuadráticas y las curvas de cuarto orden se denominan curvas cúbicas. La cantidad de puntos de control debe ser mayor o igual que el orden de la curva.

En la práctica, las curvas cúbicas son las más utilizadas. Las curvas de quinto y sexto orden son útiles en ocasiones, especialmente para obtener derivadas continuas de orden superior, pero las curvas de orden superior prácticamente nunca se utilizan porque conducen a problemas numéricos internos y tienden a requerir tiempos de cálculo desproporcionadamente grandes.

Puntos de control

Las superficies NURBS tridimensionales pueden tener formas orgánicas y complejas. Los puntos de control influyen en las direcciones que toma la superficie. Un cuadrado separado debajo de la jaula de control delinea las extensiones X e Y de la superficie.

Los puntos de control determinan la forma de la curva. [10] Normalmente, cada punto de la curva se calcula tomando una suma ponderada de una cantidad de puntos de control. El peso de cada punto varía según el parámetro que lo gobierna. Para una curva de grado d, el peso de cualquier punto de control solo es distinto de cero en intervalos d+1 del espacio de parámetros. Dentro de esos intervalos, el peso cambia de acuerdo con una función polinómica ( funciones base ) de grado d. En los límites de los intervalos, las funciones base tienden suavemente a cero, y la suavidad está determinada por el grado del polinomio.

Por ejemplo, la función base de grado uno es una función triangular. Asciende de cero a uno y luego vuelve a caer a cero. Mientras asciende, la función base del punto de control anterior desciende. De esa manera, la curva se interpola entre los dos puntos y la curva resultante es un polígono, que es continuo , pero no diferenciable en los límites de intervalo o nudos. Los polinomios de grado superior tienen, en consecuencia, derivadas más continuas. Nótese que, dentro del intervalo, la naturaleza polinómica de las funciones base y la linealidad de la construcción hacen que la curva sea perfectamente suave, por lo que solo en los nudos puede surgir la discontinuidad.

En muchas aplicaciones, el hecho de que un único punto de control influya únicamente en los intervalos en los que está activo es una propiedad muy deseable, conocida como soporte local . En el modelado, permite cambiar una parte de una superficie mientras se mantienen las demás partes sin cambios.

La adición de más puntos de control permite una mejor aproximación a una curva dada, aunque solo una determinada clase de curvas se puede representar de forma exacta con un número finito de puntos de control. Las curvas NURBS también cuentan con un peso escalar para cada punto de control. Esto permite un mayor control sobre la forma de la curva sin aumentar indebidamente el número de puntos de control. En particular, agrega secciones cónicas como círculos y elipses al conjunto de curvas que se pueden representar de forma exacta. El término racional en NURBS se refiere a estos pesos.

Los puntos de control pueden tener cualquier dimensionalidad . Los puntos unidimensionales simplemente definen una función escalar del parámetro. Estos se utilizan típicamente en programas de procesamiento de imágenes para ajustar las curvas de brillo y color. Los puntos de control tridimensionales se utilizan abundantemente en el modelado 3D, donde se utilizan en el significado cotidiano de la palabra "punto", una ubicación en el espacio 3D. Los puntos multidimensionales se pueden utilizar para controlar conjuntos de valores controlados por el tiempo, por ejemplo, las diferentes configuraciones de posición y rotación de un brazo robótico. Las superficies NURBS son solo una aplicación de esto. Cada "punto" de control es en realidad un vector completo de puntos de control, que define una curva. Estas curvas comparten su grado y el número de puntos de control, y abarcan una dimensión del espacio de parámetros. Al interpolar estos vectores de control sobre la otra dimensión del espacio de parámetros, se obtiene un conjunto continuo de curvas, que definen la superficie.

Vector de nudo

El vector de nudos es una secuencia de valores de parámetros que determina dónde y cómo los puntos de control afectan la curva NURBS. El número de nudos siempre es igual al número de puntos de control más el grado de la curva más uno (es decir, el número de puntos de control más el orden de la curva). El vector de nudos divide el espacio paramétrico en los intervalos mencionados anteriormente, generalmente denominados intervalos de nudos . Cada vez que el valor del parámetro ingresa en un nuevo intervalo de nudos, se activa un nuevo punto de control, mientras que se descarta un punto de control anterior. De ello se deduce que los valores en el vector de nudos deben estar en orden no decreciente, por lo que (0, 0, 1, 2, 3, 3) es válido mientras que (0, 0, 2, 1, 3, 3) no lo es.

Los nudos consecutivos pueden tener el mismo valor. Esto define entonces un intervalo de nudos de longitud cero, lo que implica que se activan dos puntos de control al mismo tiempo (y, por supuesto, se desactivan dos puntos de control). Esto tiene un impacto en la continuidad de la curva resultante o sus derivadas superiores; por ejemplo, permite la creación de esquinas en una curva NURBS que de otro modo sería suave. A un número de nudos coincidentes a veces se lo denomina nudo con una cierta multiplicidad . Los nudos con una multiplicidad de dos o tres se conocen como nudos dobles o triples. La multiplicidad de un nudo está limitada al grado de la curva; ya que una multiplicidad mayor dividiría la curva en partes disjuntas y dejaría puntos de control sin usar. Para las NURBS de primer grado, cada nudo se empareja con un punto de control.

El vector de nudo suele empezar con un nudo que tiene una multiplicidad igual al orden. Esto tiene sentido, ya que activa los puntos de control que tienen influencia en el primer tramo de nudo. De manera similar, el vector de nudo suele terminar con un nudo de esa multiplicidad. Las curvas con tales vectores de nudo empiezan y terminan en un punto de control.

Los valores de los nudos controlan la asignación entre el parámetro de entrada y el valor NURBS correspondiente. Por ejemplo, si una NURBS describe una ruta a través del espacio a lo largo del tiempo, los nudos controlan el tiempo que la función pasa por los puntos de control. Sin embargo, para representar formas, solo importan las proporciones de la diferencia entre los valores de los nudos; en ese caso, los vectores de nudos (0, 0, 1, 2, 3, 3) y (0, 0, 2, 4, 6, 6) producen la misma curva. Las posiciones de los valores de los nudos influyen en la asignación del espacio de parámetros al espacio de curvas. La representación de una curva NURBS se realiza generalmente avanzando con un paso fijo a través del rango de parámetros. Al cambiar las longitudes de los tramos de nudos, se pueden usar más puntos de muestra en regiones donde la curvatura es alta. Otro uso es en situaciones donde el valor del parámetro tiene algún significado físico, por ejemplo, si el parámetro es el tiempo y la curva describe el movimiento de un brazo robótico. Las longitudes de los nudos se traducen entonces en velocidad y aceleración, que son esenciales para evitar daños al brazo robótico o a su entorno. Esta flexibilidad en el mapeo es a lo que se refiere la frase no uniforme en NURBS.

Los nudos, necesarios únicamente para los cálculos internos, no suelen ser de utilidad para los usuarios de software de modelado. Por lo tanto, muchas aplicaciones de modelado no permiten editar los nudos o incluso hacerlos visibles. Normalmente es posible establecer vectores de nudos razonables observando la variación en los puntos de control. Las versiones más recientes del software NURBS (por ejemplo, Autodesk Maya y Rhinoceros 3D ) permiten la edición interactiva de las posiciones de los nudos, pero esto es significativamente menos intuitivo que la edición de los puntos de control.

Construcción de las funciones base

Las funciones base B-spline utilizadas en la construcción de curvas NURBS se denotan habitualmente como , en el que corresponde al -ésimo punto de control, y corresponde al grado de la función base. [11] La dependencia del parámetro se omite con frecuencia, por lo que podemos escribir . La definición de estas funciones base es recursiva en . Las funciones de grado 0 son funciones constantes por partes . Son uno en el tramo de nudo correspondiente y cero en el resto. Efectivamente, es una interpolación lineal de y . Las dos últimas funciones no son cero para los tramos de nudos, y se superponen para los tramos de nudos. La función se calcula como

De arriba a abajo: funciones de base lineales (azul) y (verde) (arriba), sus funciones de peso y (centro) y la función de base cuadrática resultante (abajo). Los nudos son 0, 1, 2 y 2,5

aumenta linealmente de cero a uno en el intervalo donde es distinto de cero, mientras que cae de uno a cero en el intervalo donde es distinto de cero. Como se mencionó antes, es una función triangular, distinta de cero en dos tramos de nudos que aumenta de cero a uno en el primero y cae a cero en el segundo tramo de nudos. Las funciones base de orden superior son distintas de cero en los tramos de nudos correspondientes y tienen un grado correspondientemente mayor. Si es el parámetro, y es el nudo n , podemos escribir las funciones y como y Las funciones y son positivas cuando las funciones base de orden inferior correspondientes son distintas de cero. Por inducción en n se deduce que las funciones base no son negativas para todos los valores de y . Esto hace que el cálculo de las funciones base sea numéricamente estable.

Nuevamente por inducción, se puede demostrar que la suma de las funciones base para un valor particular del parámetro es la unidad. Esto se conoce como la propiedad de partición de la unidad de las funciones base.

Funciones de base lineal
Funciones de base cuadrática

Las figuras muestran las funciones base lineal y cuadrática para los nudos {..., 0, 1, 2, 3, 4, 4.1, 5.1, 6.1, 7.1, ...}

Un tramo de nudo es considerablemente más corto que los demás. En ese tramo de nudo, el pico de la función base cuadrática es más claro y alcanza casi uno. Por el contrario, las funciones base adyacentes caen a cero más rápidamente. En la interpretación geométrica, esto significa que la curva se acerca mucho al punto de control correspondiente. En el caso de un nudo doble, la longitud del tramo de nudo se vuelve cero y el pico alcanza exactamente uno. La función base ya no es diferenciable en ese punto. La curva tendrá una esquina aguda si los puntos de control vecinos no son colineales.

Forma general de una curva NURBS

Utilizando las definiciones de las funciones base del párrafo anterior, una curva NURBS toma la siguiente forma: [11]

En este caso, es el número de puntos de control y son los pesos correspondientes. El denominador es un factor de normalización que evalúa a uno si todos los pesos son uno. Esto se puede ver a partir de la propiedad de partición de la unidad de las funciones base. Es habitual escribir esto como en donde las funciones se conocen como funciones base racionales .

Forma general de una superficie NURBS

Una superficie NURBS se obtiene como el producto tensorial de dos curvas NURBS, utilizando así dos parámetros independientes y (con índices y respectivamente): [11] con como funciones base racionales.

Manipulación de objetos NURBS

Diseño de yates a motor utilizando superficies NURBS

Se pueden aplicar varias transformaciones a un objeto NURBS. Por ejemplo, si se define una curva utilizando un cierto grado y N puntos de control, la misma curva se puede expresar utilizando el mismo grado y N+1 puntos de control. En el proceso, una serie de puntos de control cambian de posición y se inserta un nudo en el vector de nudo. Estas manipulaciones se utilizan ampliamente durante el diseño interactivo. Al agregar un punto de control, la forma de la curva debe permanecer igual, formando el punto de partida para ajustes posteriores. A continuación se analizan varias de estas operaciones. [11] [12]

Inserción de nudos

Como sugiere el término, la inserción de nudos inserta un nudo en el vector de nudos. Si el grado de la curva es , los puntos de control se reemplazan por otros nuevos. La forma de la curva permanece igual.

Un nudo se puede insertar varias veces, hasta la multiplicidad máxima del nudo. Esto a veces se denomina refinamiento del nudo y se puede lograr mediante un algoritmo que es más eficiente que la inserción repetida de nudos.

Eliminación de nudos

La eliminación de nudos es el proceso inverso de la inserción de nudos. Su finalidad es eliminar los nudos y los puntos de control asociados para obtener una representación más compacta. Obviamente, esto no siempre es posible manteniendo la forma exacta de la curva. En la práctica, se utiliza una tolerancia en la precisión para determinar si se puede eliminar un nudo. El proceso se utiliza para limpiar después de una sesión interactiva en la que se hayan añadido puntos de control manualmente, o después de importar una curva de una representación diferente, donde un proceso de conversión sencillo da lugar a puntos de control redundantes.

Elevación de grados

Una curva NURBS de un grado determinado siempre se puede representar mediante una curva NURBS de un grado superior. Esto se utiliza con frecuencia cuando se combinan curvas NURBS independientes, por ejemplo, al crear una superficie NURBS interpolando entre un conjunto de curvas NURBS o al unificar curvas adyacentes. En el proceso, las diferentes curvas deben llevarse al mismo grado, normalmente el grado máximo del conjunto de curvas. El proceso se conoce como elevación de grado .

Curvatura

La propiedad más importante en geometría diferencial es la curvatura . Describe las propiedades locales (aristas, esquinas, etc.) y las relaciones entre la primera y la segunda derivada y, por lo tanto, la forma precisa de la curva. Una vez determinadas las derivadas, es fácil calcular o aproximar la longitud del arco a partir de la segunda derivada . El cálculo directo de la curvatura con estas ecuaciones es la gran ventaja de las curvas parametrizadas frente a sus representaciones poligonales.

Ejemplo: un círculo

Las NURBS tienen la capacidad de describir círculos con exactitud. Aquí, el triángulo negro es el polígono de control de una curva NURBS (mostrado en w=1). La línea punteada azul muestra el polígono de control correspondiente de una curva B-spline en coordenadas homogéneas 3D , formada al multiplicar las NURBS por los puntos de control por los pesos correspondientes. Las parábolas azules son la curva B-spline correspondiente en 3D, que consta de tres parábolas. Al elegir los puntos de control y pesos de las NURBS, las parábolas son paralelas a la cara opuesta del cono gris (con su punta en el origen 3D), por lo que dividir por w para proyectar las parábolas sobre el plano w = 1 da como resultado arcos circulares (círculo rojo; consulte la sección cónica ).

Las splines no racionales o curvas de Bézier pueden aproximarse a un círculo, pero no pueden representarlo con exactitud. Las splines racionales pueden representar cualquier sección cónica, incluido el círculo, con exactitud. Esta representación no es única, pero a continuación se presenta una posibilidad:

El orden es tres, ya que un círculo es una curva cuadrática y el orden de la spline es uno más que el grado de sus segmentos polinómicos por partes. El vector de nudo es . El círculo está compuesto por cuatro cuartos de círculo, unidos entre sí con nudos dobles. Aunque los nudos dobles en una curva NURBS de tercer orden normalmente darían como resultado la pérdida de continuidad en la primera derivada, los puntos de control están ubicados de tal manera que la primera derivada es continua. De hecho, la curva es infinitamente diferenciable en todas partes, como debe ser si representa exactamente un círculo.

La curva representa un círculo exactamente, pero no está parametrizada exactamente en la longitud del arco del círculo. Esto significa, por ejemplo, que el punto en no se encuentra en (excepto el punto inicial, medio y final de cada cuarto de círculo, ya que la representación es simétrica). Esto sería imposible, ya que la coordenada x del círculo proporcionaría una expresión polinómica racional exacta para , lo cual es imposible. El círculo da una vuelta completa cuando su parámetro va de 0 a , pero esto se debe únicamente a que el vector nudo se eligió arbitrariamente como múltiplo de .

Véase también

Referencias

  1. ^ "Por qué KeyShot se convirtió en el software de renderizado de productos más popular". 3 de octubre de 2022.
  2. ^ Schneider, Philip. "Curvas NURB: una guía para los no iniciados". MACTECH . Consultado el 26 de septiembre de 2014 .
  3. ^ Schneider, Philip (marzo de 1996). "Curvas NURB: una guía para los no iniciados" (PDF) . Develop (25): 48–74.
  4. ^ Schoenberg, IJ (19 de agosto de 1964). "Funciones spline y el problema de la graduación". Actas de la Academia Nacional de Ciencias de los Estados Unidos de América . 52 (4). Academia Nacional de Ciencias : 947–950. Bibcode :1964PNAS...52..947S. doi : 10.1073/pnas.52.4.947 . PMC 300377 . PMID  16591233. 
  5. ^ Foley, van Dam, Feiner y Hughes: Gráficos por computadora: principios y práctica , sección 11.2, Addison-Wesley 1996 (2.ª ed.).
  6. ^ Sistemas robóticos autoorganizados bioinspirados. pág. 9. Consultado el 6 de enero de 2014 .
  7. ^ "B-splines racionales". www.cl.cam.ac.uk .
  8. ^ "NURBS: Definición". www.cs.mtu.edu .
  9. ^ David F. Rogers: Introducción a las NURBS con perspectiva histórica, sección 7.1
  10. ^ Gershenfeld, Neil (1999). La naturaleza del modelado matemático . Cambridge University Press . pág. 141. ISBN. 0-521-57095-6.
  11. ^ abcd Piegl, Les; Tiller, Wayne (1997). El libro de las NURBS (2.ª ed.). Berlín: Springer. ISBN 3-540-61545-8.
  12. ^ Piegl, L. (1989). "Modificación de la forma de B-splines racionales. Parte 1: curvas". Diseño asistido por ordenador . 21 (8): 509–518. doi :10.1016/0010-4485(89)90059-6.

Enlaces externos