SCALE

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

SCALE

Mensaje por badaman » Sab Feb 07, 2009 1:44 am

A raiz del último artículo de Afx en la web sobre el comando SCALE y el sistema de coordenadas en las ventanas del QL (ver artículo) me ha parecido buena idea demostrar, mediante un ejemplo "simpático", la potencia de esta instrucción. Véase el resultado:

Imagen

Código: Seleccionar todo

100 REMark acid_face -2009- badaman
110 ancho=512: alto=256: ca=5: pa=0
120 MODE 8: OPEN #ca,scr_
130 posvx=(512-ancho)/2
140 posvy=(256-alto)/2
150 WINDOW#ca,ancho,alto,posvx,posvy
160 PAPER #ca,pa: CLS #ca
170 ncaras=RND(5 TO 10)
180 FOR i=1 TO ncaras
190   valy=RND(20 TO 255)
200   valx=X_Scale(valy,ancho,alto)
210   y=RND(10 TO valy-10)
220   x=RND(10 TO valx-10)
230   c=RND(1 TO 7)
240   SCALE #ca,valy,0,0
250   acid_face ca,x,y,c
260 END FOR i
270 CLOSE #ca
280 PAUSE: RUN
290 :
300 DEFine FuNction X_Scale (y_scale, wide, high)
310   RETurn .7411765 * y_scale * wide / high
320 END DEFine X_Scale
330 :
340 DEFine PROCedure acid_face (canal, posx, posy, color)
350   INK #canal,color
360   CIRCLE #canal,posx,posy,10
370   FILL #canal,1: ELLIPSE #canal,posx-2.5,posy+2.5,2.5,.4,0: FILL #canal,0
380   FILL #canal,1: ELLIPSE #canal,posx+2.5,posy+2.5,2.5,.4,0: FILL #canal,0
390   ARC  #canal,posx-6,posy-2 TO posx+6,posy-2,PI-.5
400   LINE #canal,posx-5.5,posy-1 TO posx-7,posy-3
410   LINE #canal,posx+5.5,posy-1 TO posx+7,posy-3
420 END DEFine acid_face

El programa dibuja un número n de caras llamando al PROCedure 'acid_face'. El radio de la cara y la posición relativa de los ojos y la boca no varían nunca. sólo cambia la escala y la posición 'x' e 'y' en donde se dibujan las caras.

La escala (el alto) la decidimos en la línea 190.

Usamos la FuNction 'X_Scale' del artículo antes mencionado para determinar el ancho en puntos de la ventana en función de la escala.

En la línea 240 aplicamos la escala a la ventana.

'ancho' y 'alto' definen respectivamente los valores de la ventana que indican sus nombres.

'pa' indica el color de fondo de la ventana.

El número de caras y el color de las mismas se toman aleatoriamente.

Pulsamos una tecla para regenerar la pantalla.

Para salir del programa pulsamos CTRL + ESPACIO.
Última edición por badaman el Sab Feb 07, 2009 11:49 am, editado 1 vez en total.
Sinclair QL, la respuesta profesional de los 80

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: SCALE

Mensaje por radastan » Sab Feb 07, 2009 10:46 am

¿Reminiscencias de Watchmen?

:lol:

La verdad es que SCALE permite cosas bastante buenas, es posible repetir modelos en un escenario sin tener que tener uno para cada distancia.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
badaman
Sabreman
Mensajes: 499
Registrado: Mar Ene 29, 2008 10:58 am
Contactar:

Re: SCALE

Mensaje por badaman » Sab Feb 07, 2009 11:26 am

SCALE tiene los siguientes parámetros: SCALE [cannal,]escala,posx,posy

Cambiando el valor de 'escala' (tamaño de la escala vertical) que indica el número de puntos gráficos (no pixels) de una ventana en el eje y, podemos dibujar una imagen aumentando y reduciendo el zoom. A mayor escala más pequeño se verá el dibujo, y al contrario.

Cambiando el valor de 'x' e 'y' (coordenadas de origen de la escala) podemos movernos por un espacio gráfico mucho mayor que el de la misma ventana donde estamos mostrando el dibujo.

Imagina lo que nos permite hacer esto en un mapa de un juego o en un plano cartográfico.

El valor de escala por defecto es 100. Si queremos que el valor de escala coincida con el número de pixels de altura en una ventana debemos definir el mismo número de escala que el numero de pixels de altura de la ventana, por ejemplo, definiendo una ventana que ocupe toda la pantalla y aplicándole un valor de escala de 256.

Código: Seleccionar todo

WINDOW 512,256,0,0
SCALE 256,0,0


Con la ROM Minerva podemos incluso usar valores de escala negativos, lo que nos permite dibujar también imágenes boca abajo. Lástima no contar con un parámetro de escala horizontal y poder mostrar imágenes en espejo o deformadas.
Sinclair QL, la respuesta profesional de los 80

afx
Sabreman
Mensajes: 396
Registrado: Dom Feb 24, 2008 10:56 pm

Re: SCALE

Mensaje por afx » Sab Feb 07, 2009 11:37 am

badaman escribió:me ha parecido buena idea demostrar, mediante un ejemplo "simpático", la potencia de esta instrucción

¡¡Buen ejemplo!! ... (y además simpático) :D .

Efectivamente, una instrucción muy útil. Con este comando es muy simple hacer un "zoom" y "scroll" de un dibujo vectorial cambiando simplemente la escala de representación (sin alterar las coordenadas del dibujo).

.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados