Читать книгу Processing - Tomás Domínguez Mínguez - Страница 29

4.6 MATRICES DE TRANSFORMACIÓN

Оглавление

Cada vez que Processing realiza una traslación, una rotación o un escalado, almacena la información necesaria para realizar dicha transformación en una tabla, llamada matriz de transformación. A pesar de lo que pudiera parecer, esta tabla, o matriz, contiene solo unas pocas filas y columnas que, sin embargo, gracias a la magia de las matemáticas es suficiente para hacer cualquier tipo de transformaciones.

Para entender la necesidad de usar matrices de transformación, imagine una pantalla con cierta complejidad en la que, el dibujo de cada elemento que contenga, requiera el giro o la traslación de los ejes de coordenadas a una posición diferente. Llegaría un momento en el que, con tanta transformación, sería difícil saber cómo están situados en cada momento. Por lo tanto, se hace necesario tener un mecanismo que permita delimitar el alcance de los cambios realizados en cada una de dichas transformaciones.

Para resolver este problema, Processing proporciona las funciones pushMatrix() y popMatrix(). Con dichas funciones puede almacenar las matrices de transformación en lo que en informática se conoce como pila. Una pila es una lista ordenada que permite almacenar y recuperar datos; en su caso, matrices de transformación. A dicha lista ordenada se le van añadiendo elementos mediante una operación de tipo push (apilar) y se le extraen elementos mediante una operación de tipo pop (desapilar). Por poner un símil de la vida diaria, en la cocina trabaja continuamente con pilas de elementos cuando maneja, por ejemplo, platos. Crea una pila de platos cuando va añadiendo platos uno encima de otro. Cuando los pone en la mesa, lo que hace es desapilarlos, empezando desde arriba, es decir, por el último apilado. Por eso se dice que una pila trabaja en modo LIFO (Last In First Out – El último en entrar es el primero en salir). Dicho esto, si en vez de platos trabajara con matrices de transformación, la forma de apilar sería con pushMatrix() y la de desapilar con popMatrix().

Conocidos estos conceptos, seguro que ya habrá entendido la utilidad de dichos comandos: permiten asegurar que el sistema de coordenadas esté «limpio» después de realizar cualquier operación de transformación. Por eso, y aunque no sea imprescindible, es muy aconsejable que siempre que realice algún tipo de transformación, previamente invoque la función pushMatrix() para colocar el estado actual del sistema de coordenadas en la parte superior de la pila y, una vez realizadas dichas transformaciones, llame a la función popMatrix() para retirar dicho estado y dejarlo todo como estaba. De este modo, no le afectarán las transformaciones realizadas anteriormente.

NOTA. Processing restaura el sistema de coordenadas a su estado original en cada bucle de ejecución del bloque draw(), es decir, con el origen en la parte superior izquierda de la ventana, sin rotación y sin escalado.

Processing

Подняться наверх