2do paso: Reanimar al objeto (final)

Con esta sexta parte cerramos el 2º paso del tutorial. Si llegaste hasta aquí y entendiste todo, te felicito… sin duda aprendiste muchísimas cosas que te serán útiles de ahora en adelante.
Pero volvamos a lo nuestro. Nos falta trabajar un poco más en la trayectoria de Murci… repasemos lo que habíamos comentado sobre ella:

"Después de un rato de observarla, queda de manifiesto que sigue siendo muy recta y, peor aún, muy previsible. Y si hay algo que caracterice al vuelo de un murciélago no es justamente su previsibilidad."

Vamos pues a terminar con esta situación.

Cambiando la trayectoria (II)

Como casi siempre, existen varias maneras de resolver un determinado problema. Para "acotar" el nuestro, propongamos como 1º objetivo hacer que la trayectoria deje de ser tan recta.

¿Qué hace que la trayectoria sea tan recta?

Como dijimos antes, —y cito textualmente—: "Debido a los rebotes su dirección cambiará alternativamente entre los valores +60º, +120º, -120º y -60º…" ; bien, pero lo que no explicitamos es que en los tramos entre cada rebote la dirección se mantiene constante, y por tanto, ¡recorrerá esos segmentos siguiendo una línea recta!. Eso es justo lo que vimos cuando usamos nuestros controles de dibujo.

¿Cómo hacer que en esos tramos la dirección no sea siempre la misma?

Una posible solución es que, tal como hicimos con el ejemplo del cambio de tamaño progresivo del gato (are you remember?), generemos cambios relativos de forma progresiva en la dirección de nuestro objeto… la instrucción adecuada para esto es girar ( ) grados: vamos a insertarla dentro del bucle del programa.
Veamos como queda nuestro programa "principal" con la incorporación de este bloque: debido a que nos va a facilitar la explicación (y también porque "funciona" bien) , vamos a elegir que el cambio en la dirección sea de 1º en sentido horario.
Analizando lo que pasa dentro del bucle, vemos que el objeto tiene antes de llegar a él una dirección de 60º; luego de moverse 10 pasos ésta cambia a 61º, Murci cambia de disfraz y hay una espera de 0,2seg; vuelve a moverse 10 pasos (en dirección 61º) y cambia su dirección a 62º… es decir: por cada paso del bucle cambiaremos el ángulo de dirección en 1º.
lápiz
No sigamos adelante sin probar el programa; aprovechá y usá los comandos de dibujo que implementamos anteriormente para ver la nueva trayectoria más claramente.

CONCLUSIÓN: la trayectoria nueva ya no está compuesta de largos tramos rectos y ahora más bien parece la unión de largos "arcos de círculo", interrumpidos —obviamente— al llegar a los límites del escenario.

Esta solución funciona de manera aceptable para cambios de dirección de pequeño valor —digamos entre -3º y 3º—. Es buen momento para que pruebes nuestro programa poniendo otros valores de giro (positivos y negativos)… verás que con valores más altos la trayectoria parece ser circular, y ya no nos servirá para nuestros propósitos.
"Y para finalizar …" Si, ya estamos terminando esta sección. Asegurate de haber captado bien esto último que vimos antes de pasar al punto que sigue, que es un poco más difícil de entender (y más aún de explicar).
 

Cambiando la trayectoria (III)

El objetivo de programar una trayectoria que no sea tan recta lo conseguimos, pero ¿no sigue siendo previsible?. Fijate que cada vez que arranques el programa, sea cual sea la instrucción de giro elegida (por ej. girar 1º), Murci seguirá siempre el mismo camino. ¿Existirá alguna manera de evitarle esta "aburrida" circunstancia?

Murci juega a los dados

NO. No estoy proponiendo que para que no se aburra tanto se ponga a jugar a los dados en vez de volar (it's a joke!).

Digo, ¿qué pasaría si para determinar que ángulo va a girar al ejecutarse la instrucción girar ( ? ) grados tirásemos un dado, y usásemos ese resultado en la instrucción?

¡Quietos ahí! Pensemos.

Creo haber percibido tu intento de huída. Date un minuto para pensar.
Cuando tiro un dado ¿sale cualquier número? SI y NO.
Desde el punto de vista de que no sé que número va a salir, vale el SI.
¿Pero sale el 10? ¿y el 34? NO, sale algún número entero entre el 1 el 6 (inclusive). Entonces: no sale cualquier número.
CONCLUSIÓN: conozco el conjunto de los números que pueden salir (1, 2, 3, 4, 5 y 6), pero no puedo saber de antemano cuál de ellos saldrá en cada tirada.

NOTA

El análisis muy básico que estamos haciendo tiene que ver con la teoría de los procesos aleatorios, presente en el estudio de una de las ramas de las Matemáticas intitulada Probabilidad y Estadísticas.
En el uso de Scratch normalmente no se necesitará saber mucho más sobre "números al azar" que lo que es mencionado aquí.
Esta idea tan simple es la base de muchos "Juegos de azar" con que nos deleita (?)  la vida cotidiana… desde la lotería, el bingo, la ruleta, etc. Todos ellos se basan en la generación al azar de números (dentro de un conjunto determinado).

¿Entonces que pasaría si generase una trayectoria usando ángulos de giro generados al azar? Pasaría que dejaría de ser previsible, porque sería imposible saber de antemano la "forma" de la misma, y sería improbable que pudiese seguir las mismas trayectorias cada vez que arranque el programa. Leélo de nuevo, leeeento….

Me vas a creer (y a terminar de entender) cuando lo probemos con Murci.

Usando el azar

"Que poético. Pero no es momento de poesía cuando cargamos con una mesa de ruleta en los hombros, devanándonos el cerebro para ver por dónde entrarla al escenario de Scratch… "
azar
En realidad tengo una solución más simple (sorry, debí haberlo mencionado antes). Mirá esta instrucción del grupo Operadores (matemáticos): casualmente sirve para generar un número entero al azar dentro de un rango especificado. Estos bloques deben usarse dentro de las áreas de ingreso de información numérica presentes en algunos bloques (fijate que tienen una forma distinta).
azar
Por ejemplo: Esta expresión combinada implica que se va a ejecutar un giro de [un número cualquiera del conjunto (1, 2, 3, 4, 5, 6) ] grados en sentido horario… es decir, puede girar 1º, o 2º, o 3º, o 4º, o 5º, o 6º: alguno de estos valores. De antemano no sabemos cual será.
¿Se parece a la idea de tirar un dado, y en base al resultado…bla, bla, bla? ¡Dime que sí!

Consiguiendo lo imprevisible

Conclusión: con el uso de cambios de dirección al azar conseguiremos superar nuestro 2º desafío: que la trayectoria deje de ser previsible.
Llegamos "por fin al fin" de este 2do paso. Sólo un par de detalles por destacar:
  1. Cambiamos el tiempo de espera (o delay) dentro del bucle para hacer un poco más ágil el movimiento de Murci —ahora es de 0,1 segundos, o una décima de segundo—.
  2. Cambiamos los valores ingresados en la instrucción combinada. El rango de valores posibles de giro irá ahora de -15º a 15º. Es lo mismo que decir que con esta instrucción se podrá cambiar hasta 15º en sentido horario o hasta 15º en sentido anti-horario, y no más.
azar
NOTA: La consecuencia de usar estos valores será que las probabilidades de que gire en un sentido sean idénticas a las probabilidades de que gire en el otro (me vas a tener que creer, o ponerte a estudiar Probabilidad).

Y con Uds.… los 3 programas propuestos hasta aquí:
scripts
CONSEJO: si todo te funcionó bien, guardá el proyecto. De ahí en más experimentá todo lo que quieras, siempre tratando de no cambiar más de un par de cosas al mismo tiempo, y siempre tratando de "anticipar mentalmente" que es lo que va a suceder (…y si algo te sorprende, comenzá a estudiarlo por tu cuenta).
Aprovechá los 2 pequeños scripts de dibujo que agregamos para comparar la trayectorias, y si te animás, agregale bloques del tipo Lápiz para cambiar colores, grosores… tu imaginación también debe volar, niño (o no tan niño).

Cuando te canses de experimentar y/o reinventar nuevos proyectos usando todo lo visto hasta aquí, te desafío a que sigas el 3º paso del tutorial —Interacción entre objetos—
Yo por ahora los dejo, por hoy ya me cansé de murciélagos… además en la tele ya está por empezar Batman Returns, y no me la pienso perder.
Última actualización: Febrero 22, 2014

No hay comentarios.:

Publicar un comentario

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