Manual de Basic Spectrum 48k. |
Capítulo 17
GráficosResumen
En este capítulo veremos cómo dibujar imágenes en el ZX Spectrum. La parte de la pantalla que puede utilizar tiene 22 líneas y 32 columnas, lo que equivale a 22*32=704 posiciones de carácter. Como quizás recuerde del capítulo 16, cada una de estas posiciones de carácter está constituida por cuadrados de 8 x 8 puntos y estos se denominan "pixels" (elementos de imagen). Un pixel está especificado por dos números, que son sus coordenadas. La primera, su coordenada x, indica la distancia en sentido transversal desde la columna izquierda extrema (recuerde que x es una cruz, en el sentido transversal); la segunda, su coordenada y, indica la altura desde la parte inferior. Estas coordenadas suelen escribirse como un par de números entre paréntesis, por lo que (0,0), (255,0), (0,175) y (255,175) son las esquinas inferior izquierda, inferior derecha, superior izquierda y superior derecha, respectivamente. La sentencia PLOT coordenada x, coordenada y
entinta el pixel con estas coordenadas, de modo que el siguiente programa "sarampión" 10 PLOT INT (RND * 256), INT (RND * 176): INPUT a$: GO TO 10
dibuja un punto aleatorio cada vez que pulsa ENTER. Veamos, ahora, un programa bastante más interesante. Traza una representación gráfica de la función SIN (una onda sinusoidal) para los valores entre 0 y 2 PI.
El siguiente programa traza un gráfico de SQR (parte de una parábola) entre 0 y 4:
Observe que las coordenadas del pixel son bastante diferentes de la línea y columna en un AT. Puede encontrar el diagrama en el capítulo 15 de utilidad cuando trabaje con las coordenadas del pixel y los números de línea y de columna. Para ayudarle en sus dibujos, el ordenador trazará líneas rectas, círculos y arcos, con el empleo de las sentencias DRAW y CIRCLE. La sentencia DRAW, para dibujar una línea recta, adopta la forma DRAW x,y
El lugar de partida de la línea es el pixel en donde quedó la última sentencia PLOT, DRAW o CIRCLE (se denomina posición PLOT; RUN, CLEAR, CLS y NEW le repone a la esquina inferior izquierda, en (0,0)) y el lugar de final del trazado es x pixels a la derecha del mismo e y pixels arriba. La sentencia DRAW, en sí misma, determina la longitud y la dirección de la línea, pero no su punto de partida. Observe que los números en una sentencia DRAW pueden ser negativos, aunque los incluidos en una sentencia PLOT no lo pueden ser. Asimismo, puede trazar y dibujar en color, aunque ha de tener presente que los colores cubren siempre la totalidad de una posición de carácter y no puede especificarse para pixels individuales. Cuando se traza un pixel, se ajusta para mostrar el color de tinta en plenitud y a la totalidad de la posición de carácter que lo contiene se le da el color de tinta corriente. El siguiente programa lo pone de manifiesto:
Las líneas parecen ser más anchas a medida que prosigue el programa y ello se debe a que una línea cambia los colores de todo el entintado en pixels de todas las posiciones de carácter que atraviesa. Observe que puede encajar los elementos PAPER, INK, FLASH, BRIGHT, INVERSE y OVER en una sentencia PLOT o DRAW, lo mismo que podría hacerlo con PRINT e INPUT. Van entre la palabra clave y las coordenadas y están terminadas por punto y coma o comas. Una característica adicional de DRAW es que puede utilizarlo para dibujar arcos de circunferencia en lugar de líneas rectas, con el empleo de un número suplementario para especificar un ángulo a girar; la forma es: DRAW x,y,a
x e y se utilizan para especificar el punto final de la línea lo mismo que antes y a es el número de radianes que debe girarse a medida que se avanza: si a es un número positivo se gira a la izquierda, mientras que si a es negativo, se gira a la derecha. Otra forma de considerar a es como indicación de la fracción de un círculo completo que se dibujará: un círculo completo es 2 PI radianes, por lo que si a = PI dibujará un semicírculo, si a = 0,5 * PI dibujará un cuarto de un círculo y así sucesivamente. Por ejemplo, supongamos a = PI. Entonces, cualesquiera que sean los valores que tomen x e y, se trazará un semicírculo. Ejecute: 10 PLOT 100, 100: DRAW 50, 50, PI
que dibujará lo siguiente:
El dibujo comienza en una dirección de sudeste, pero en el momento en que se detiene tiene dirección noroeste; en el recorrido entre dichos dos puntos ha girado 180° ó PI radianes (el valor de a). Ejecute el programa varias veces, con PI sustituido por otras varias expresiones, v.g. - PI, PI / 2, 3 * PI / 2, PI / 4, 1, 0. La última sentencia de este capítulo es CIRCLE, que dibuja un círculo completo. Especifica las coordenadas del centro y del radio del círculo con el empleo de CIRCLE coordenada x, coordenada y, radio
Lo mismo que con PLOT y DRAW, puede poner las diversas clases de elementos de color al principio de una sentencia CIRCLE. La función POINT le dice si un pixel es de color de tinta o de papel. Tiene dos argumentos, las coordenadas del pixel (que deben estar encerradas entre paréntesis) y su resultado es 0 si el pixel es de color de papel y 1 si es color de tinta. Pruebe: CLS : PRINT POINT (0,0) : PLOT 0,0: PRINT POINT (0,0)
Teclee: PAPER 7: INK 0
e investiguemos cómo INVERSE y OVER operan en el interior de una sentencia PLOT. Las dos afectan al pixel correspondiente y no al resto de las posiciones de carácter. Suelen estar inactivas (0) en una sentencia PLOT, por lo que sólo necesita mencionarlas para que se les active (1). Se da a continuación una lista de las posibilidades para su referencia: PLOT; -esta es la forma habitual. Traza un punto de tinta; esto es, posiciona el pixel para poner de manifiesto el color de tinta. PLOT INVERSE 1; -traza un punto de erradicador de tinta; esto es, posiciona el pixel para poner de manifiesto el color del papel. PLOT OVER 1: -cambia el pixel a partir de cualquier estado anterior, por lo que si tenía color de tinta adquirirá color de papel y viceversa. PLOT INVERSE 1; OVER 1; -deja el pixel exactamente igual a como estaba antes; pero observe que también cambia la posición PLOT, por lo que podría utilizarle simplemente para hacer esa operación. Como otro ejemplo de utilización de la sentencia OVER, llene la pantalla con escritura utilizando blanco y negro y luego, teclee: PLOT 0, 0: DRAW OVER 1; 255, 175
Dibujará una línea bastante correcta, aun cuando tenga interrupciones en la misma siempre que se encuentre con alguna escritura. Ahora vuelva a hacer exactamente el mismo comando. La linea se desvanecerá sin dejar ningún rastro. Esta es la gran ventaja de OVER 1. Si hubiera dibujado la línea utilizando PLOT 0, 0: DRAW 255, 175
y la hubiera borrado con el empleo de PLOT 0, 0: DRAW INVERSE 1; 255, 175
entonces, habría borrado también parte de la escritura. Ahora, pruebe: PLOT 0, 0: DRAW OVER 1; 250,175
e intente borrar la línea mediante DRAW OVER 1; -250, -175
Con esta orden no se opera de forma correcta, porque los pixels que la línea utiliza en el recorrido de retorno no son completamente los mismos que los que se emplearon en el trazado. Ha de borrar una línea en la misma dirección exactamente en que la dibujó. Una forma de conseguir colores no habituales es introducir dos colores normales juntos en un solo cuadrado, con el empleo de un gráfico definido por el usuario. Ejecute el siguiente programa:
que da el gráfico definido por el usuario que corresponde a una configuración de tablero de ajedrez. Si imprime este carácter (modo de gráfico, luego a) en tinta roja sobre papel amarillo, le encontrará con un color naranja moderadamente aceptable. Ejercicios
|
Manual de Basic Spectrum 48k. |