|
Sobre Matemáticas y Programación
Resumen Se hace una descripción de cómo se usan las matemáticas en la solución de algunos problemas de graficación por computadora, usando elementos de Algebra Lineal y matemáticas generales. Se presentan las implementaciones en Java de los ejemplos.
IntroducciónEn este trabajo vamos a abordar algunas ideas matemáticas para resolver algunos problemas de implementación en el contexto de manejo de gráficos por computadora. Muchas de las ideas provienen del Algebra Lineal en general. En esencia se intenta mostrar como algunas tareas de programación pueden convertirse en un campo adecuado para trabajar en 'matemática aplicada'. La solución de problemas de gráficos requiere habilidades de programación y algoritmos eficientes. En los problemas que se presentan, se muestra la parte matemática que resuelve el problema y la solución de algunos problemas de índole puramente computacional. Los mejores algoritmos para las tareas usuales de programación de gráficos se pueden encontrar en los libros dedicados a la graficación por computadora (Computer Graphics). Una bibliografía básica se puede obtener al final de este trabajo.
Algoritmos eficientesDesde el punto de vista de las matemáticas, muchas veces importa solo la validez teórica de un resultado y no su eficiencia práctica. Pero en el mundo de los cálculos por computadora, importa el número de operaciones para llevar a cabo una tarea.Por ejemplo, en el contexto de las matrices
A(BC) = (AB)C. Es decir, da lo mismo hacer el
producto A(BC) que el producto (AB)C. El resultado
es el mismo. Desde el punto de vista de la computación estos cálculos pueden
ser muy distintos en términos de esfuerzo computacional. En efecto, si
calculamos solamente el número de multiplicaciones que requiere cada una de
estos productos de matrices, podemos obtener resultados dramáticamente distintos! Si tenemos las matrices Am×n = (aij) y Bn×k = (bij) entonces, si denotamos la fila i-ésima de A con Fi = (ai1, ... , ain)
y la columna j-ésima de B con
Cj = (b1j, ... , bnj)
entonces
AB = Fi . Cj
= aihbhj
de donde, para hacer la multiplicación Am×nBn×k se requieren m . k . n multiplicaciones (no estamos contando sumas). Así, la multiplicación
A10×100B100×5 requiere 5000
multiplicaciones mientras que
B100×5C5×50 requiere 25000
multiplicaciones, finalmente
Así, aunque (AB)C = A(BC), computacionalmente es mejor calcular (AB)C en este caso, pues requiere 67 500 multiplicaciones menos! Una discusión detallada de este tópico se puede ver en [Cormen] |