2do paso: Reanimar al objeto (parte IV)

Ya conseguimos extender el tiempo de vuelo de nuestro amigo, pero quedan algunos interrogantes:
  • ¿Qué hay de la "evolución espacial" del mismo? (bueno, digamos… ¿qué camino sigue cuando vuela?).
  • ¿Responde a los dictados de su especie? (say what?, o en argentino: ¿lo qué?).
Si no entendiste el punto anterior hacés bien. Lo que quiero decir es que vamos a empezar a analizar la "forma" que sigue la trayectoria de Murci y ver como podemos cambiarla… ¡ningún murciélago es tan prolijo al volar!

Para poder hacer esto inevitablemente debemos dejar en claro TODO lo que tenga que ver con el posicionamiento y el direccionamiento de los Objetos.

Coordenadas y ángulos

"¿Matemática? ¡Ya tengo bastante con la escuela!" I'm sorry, pero lo que sigue es una explicación que nos llevará a controlar de manera efectiva a los objetos. Quizá puedas terminar el tutorial sin entender esto, quizá puedas resolver intuitivamente cuestiones sobre giros y distancias en tus primeros proyectos, pero si seguís programando con Scratch en algún momento vas a necesitar tener en claro lo que veremos ahora… yo te aconsejo que hagas el intento, vos decidís (o tú decides, para el mercado hispanoparlante).

Colocar con precisión un Objeto

Situación problemática: supongámonos en un parque tratando de orientar a un amigo para que se coloque exactamente en el único lugar desde donde se puede ver la cúpula de un edificio, debiéndole indicar además hacia dónde debe apuntar su mirada. El desafío es que NO se nos permitirá movernos con él y señalarle con un gesto hacia dónde mirar... sólo podremos pasarle las instrucciones escritas en un papel.
Seguramente existen varias maneras de resolver esto; la que usaremos aquí servirá (creo) para comprender nuestro posterior trabajo. Necesitaremos sí de algunos elementos:
  • Un punto de referencia: aquel pino que es mucho más alto que los otros árboles será fácilmente identificable (será, aunque no lo sepamos, nuestro centro de coordenadas).
  • Una brújula para determinar con precisión una línea imaginaria norte-sur (podría ser nuestro eje "y" de coordenadas), y una línea imaginaria este-oeste (nuestro eje "x" de coordenadas).
  • Algún instrumento que nos permita medir ángulos de desvío respecto al Norte; la misma brújula puede cumplir esta función. Así sabremos hacia dónde orientar nuestra mirada en su momento.
Ahora pensemos un posible conjunto de instrucciones (¿programa?) para pasar de modo escrito; a mi se me ocurrió lo siguiente:

"Primero tenés que ir hasta el pino más alto del parque, luego caminá 40 pasos hacia el norte y 80 pasos hacia el este. Una vez allí dirigí tu mirada en dirección noreste (mirá hacia el norte y girá unos 45º en sentido de las agujas del reloj), y desde ahí ya podrás ver la cúpula del edificio…"

"El parque, el árbol, la brújula, el edificio… ¿de qué me estás hablando?". Puedo leer tu mente, alumn@.
El filósofo y matemático René Descartes (1596-1650) desarrolló el sistema de coordenadas cartesianas para ecuaciones gráficas y figuras geométricas.

Mediante este método es posible determinar la ubicación de un punto en el plano con sólo conocer dos valores que indiquen su distancia relativa respecto a dos rectas —ejes x e y— , que se cruzan en el denominado centro de coordenadas.

Para terminar de posicionar un objeto "no puntual" (en nuestro caso un objeto bidimensional), necesitaremos de un tercer valor —también relativo—: un ángulo respecto de una dirección de referencia (usualmente se toma alguno de los dos ejes antes citados).

El escenario: sus coordenadas y ángulos

Así es, mis amigos. Nuestra concepción del universo (y aun más, nuestra filosofía —con pros y contras—) están altamente influenciadas por el pensamiento del filósofo/matemático antes citado. Quienes idearon Scratch no son la excepción, e implementaron el sistema cartesiano para definir el posicionamiento de los objetos en el escenario. Además decidieron adoptar el semieje "y positivo" como referencia angular, y el sentido horario para definir un ángulo como positivo. Parece Chino básico, pero veamos la imagen siguiente…
escenario cartesiano
  • Lo que estás viendo es el escenario de Scratch, de 480 pasos de ancho y 360 pasos de alto; sobre él hemos sobrepuesto una cuadrícula de guía construída con una separación de 20 pasos en ambos sentidos (o sea: es de 20 x 20 pasos).
  • En rojo se han resaltado ambos ejes cartesianos: podés pensarlos como 2 rectas numéricas a 90º entre sí, en donde los valores positivos para el eje x están a la derecha, y para el eje y están arriba; como se observa los ejes están centrados respecto al escenario. Donde ellos se cruzan se determina el centro de coordenadas (x=0, y=0), por lo que este punto coincide con el centro geométrico del rectángulo que conforma los límites del escenario.
  • Los ángulos se determinan respecto a la vertical ascendente, y si los "medimos" en sentido horario obtendremos valores positivos; en cambio si los "medimos" en sentido anti-horario sus valores serán negativos (si hay tiempo volveremos sobre el tema).
Por ejemplo, el objeto con forma de flecha que está colocado sobre el escenario tiene coordenadas (x=80, y=40) porque está 80 pasos a la derecha del centro de coordenadas (o sea x= +80 pasos), y 40 pasos arriba de dicho centro (o sea y= +40 pasos). Además está apuntando en un sentido determinado: forma un ángulo de +45º respecto a la vertical ascendente… diremos de aquí en más que tiene una dirección de 45º.
Con un sistema de referencia cartesiano y tres valores numéricos conseguimos colocar y orientar con absoluta precisión un objeto bidimensional.
¿Cómo? ¿Que se parece mucho a nuestro ejemplo del parque? ¿Todavía estás leyendo…? El universo es un insondable misterio (estoy leyendo a un tal Borges).

Juntando todo

Aprovechemos la "afortunada casualidad" que se nos presentó. Tratemos de asociar el ejemplo del parque a lo que nos permite hacer Scratch al momento de posicionar un objeto…
new
  • "Primero tenes que ir hasta el pino más alto del parque…". Vamos a asociar al pino con nuestro centro de coordenadas, así que la instrucción más simple es:
new
  • "…luego caminá 40 pasos hacia el norte…". Necesitaremos mirar hacia el norte y caminar (obvio). En Scratch no hay norte, así que vamos a asociar la dirección arriba (ceroº) con el mismo (será nuestro norte). Ahora nos queda:
new
  • "…y 80 pasos hacia el este.". Necesitaremos mirar hacia el este y caminar (más que obvio). Podríamos girar 90º respecto a donde estamos y caminar, pero vamos a usar apuntar en dirección (90)… (la primera es una solución relativa, la que usamos es absoluta)
new
  • "…Una vez allí dirigí tu mirada en dirección noreste (mirá al norte y girá; unos 45º en sentido de las agujas del reloj)…". Podríamos mirar directamente al noreste o seguir al pie de la letra las instrucciones. Hagamos esto último:
Si aplicásemos estas instrucciones sobre un objeto cualquiera de cualquier proyecto los resultados serían los mismos: quedaría posicionado y direccionado de manera similar al objeto con forma de flecha de la imagen que está más arriba.
La razón de esto es que utilizamos bloques que permiten tanto el posicionamiento ABSOLUTO (ir a x:( ) y:( )) como el direccionamiento ABSOLUTO (apuntar en dirección ( )).
En el apéndice que sigue vamos a pasar a explicar en detalle esta cuestión, pero no quiero terminar este tema de coordenadas y ángulos sin antes resaltar que la serie de 7 instrucciones anterior no es la única manera de resolver el problema: está pensada con la finalidad de explicar como trasladar un problema del mundo "real" a un proyecto Scratch.

IMPORTANTE

info
En el Área de Información del Objeto Actual podremos ver en todo momento cuales son los valores de sus coordenadas x e y, como así también en que dirección está apuntando. Un segmento azul nos permirá interpretar rápidamente cual es este valor angular.
Además allí encontraremos otra info relevante: el nombre del objeto, su estilo de rotación, color del lápiz, etc.
De hecho, en cualquiera de nuestros proyectos conseguiríamos igual resultado con sólo usar los dos bloques siguientes (ambos de tipo absoluto).

Apéndice: Absoluto vs. relativo [revisited]

Puesto así parece complicado, pero es otra vez tratar de analizar la diferencia entre fijar y cambiar: ya lo hicimos cuando vimos el tema transformación de tamaños (si no os acordáis, acá te dejo un link).
Si estoy tan persuasivo (por buscar una palabra amable) con el tema es porque la experiencia que tengo en la enseñanza de Scratch así me lo señala. Una de las preguntas más comunes de los alumnos es "¿por qué no me funciona?", y en una gran parte de los casos los errores en la programación se deben a que no tienen bien en claro la diferencia entre estos dos grupos de instrucciones.
Revisitemos la cuestión tomando como base ahora a los bloques de movimiento.

A la hora de programar el movimiento de objetos con Scratch, se debe tener en cuenta lo siguiente:

new
Si quiero posicionar de manera absoluta un objeto (es decir, sin importar dónde estuvo antes), debo fijar su posición. Los bloques que me permiten hacerlo son los aquí mostrados (sólo usamos uno de ellos en nuestro proyecto). Desde ya que deberíamos adaptar el valor de x  y el de y a nuestras necesidades.
new
Si quiero direccionar de manera absoluta un objeto (es decir, sin importar adonde apuntaba antes), debo fijar su dirección. Los siguientes bloques (de los cuales, nuevamente, usaremos uno) sirven a tal propósito. El valor de la dirección a colocar responde a las pautas angulares que ya mencionamos
—0º arriba, 90º a la derecha, etc.—
new
Si lo que quiero es mover un objeto tomando como base (como referencia) el lugar actual, deberé cambiar su posición de forma "relativa a la posición anterior" una cierta cantidad de pasos. Si usamos alguno de los dos últimos bloques que aquí mostramos conseguiremos una translación respecto al eje correspondiente; si usamos mover ( ) pasos tengamos en cuenta que se moverá siguiendo la línea imaginaria que determine su dirección actual. En todos los casos se permiten introducir en las instrucciones valores positivos y negativos para la cantidad de pasos (camina para adelante o para atrás).
new
Por último, si lo que quiero es rotar un objeto una cierta cantidad de grados tomando como referencia su dirección actual, deberé girar al mismo de forma "relativa a la dirección anterior". Tenemos dos bloques para hacer esto, uno que nos permite girar en sentido horario y otro en sentido anti-horario (en realidad bastaría con uno de ellos: los que aquí te mostramos, usados con los valores que ves, tendrían el mismo efecto sobre el objeto).
Prometo solemnemente no volver más sobre el tema: algunas dudas se te aclararán a medida que terminemos el tutorial, o cuando hagas tus proyectos, o…
Nuestro murciélago debe padecer ya de síndrome abandónico: vamos a visitarlo y a darle ánimos, que la vida sigue…
Última actualización: Febrero 22, 2014

No hay comentarios.:

Publicar un comentario

© Scratch CodeLab | D153ñ0 b454d0 3n l4 pl4n71ll4 SimpleRWD d3 Oloblogger