Cristalab |
Tracking en perspectiva en After Effects Posted: 18 May 2012 05:13 AM PDT Hasta ahora hemos usado el rastreador para ejecutar trackings sencillos en puntos concretos, pero modificando las opciones para utilizar capturas de múltiples puntos, como bordes en perspectiva, entenderemos las posibilidades que nos ofrece esta herramienta para obtener composiciones mucho más complejas y ajustadas a las necesidades reales de nuestro día a día, en el mundo de la composición dentro de After Effects. Crearemos un cartel de reemplazo, que incorporaremos en el material original, ajustando su aspecto para que encaje correctamente en el conjunto, capturando el desplazamiento del inicial y componiéndolo con varios ajustes específicos. Saludos. |
Métodos del Objeto Date de Javascript Posted: 23 Apr 2012 05:31 AM PDT En este tutorial aprenderemos los métodos del objeto Date de javaScript, analizaremos todos y cada uno de ellos, usaremos ejemplos prácticos , e intentaremos comprender de manera fugaz los métodos set y get de los objetos también aprenderemos a trabajar con fechas, mediante la realización de 2 sencillos ejercicios. La decisión de hacer un tutorial sobre el objeto Date, siendo una cosa tan vista y con tanta información publicada en la red, ha sido, que en Clab no he visto ningún tutorial concreto sobre ello, y veo a gente de vez en cuando preguntar cosas sencillas sobre las fechas y cómo trabajar con ellas. Además, así aprovecho y me vale de introducción al tutorial que estoy desarrollando, para crear un calendario en jQuery desde cero, de modo que los interesados estad atentos. ¿Quién debería leer este tutorial y quién no?Caso A: Si de vez en cuando vas andando por la calle, y oyes una voz susurrar a tú oído ddddaaaatttteee, y eso te causa escalofríos incontrolables. No te preocupes, es buena señal, tu eres el target perfecto de este tutorial. Caso B: Si estás buscando información sobre el objeto Date, pero para otro lenguaje, igual no te viene mal, echarle 15 minutillos a este tuto, y debido a las similitudes entre los lenguajes igual le sacas provecho y todo. 1. El objeto DatePara comenzar vamos a ver cómo almacenar un objeto date con la fecha actual en una variable y también veremos que nos muestra la consola de depuración si imprimimos esa variable. Código : //Creamos una variable y almacenamos la fecha de hoy (paréntesis vacío) var fechaHoy = new Date(); //Imprimimos la variable en la consola console.log(fechaHoy); Si quisiéramos configurar una fecha diferente a la actual, le pasaríamos los parámetros a Date de la siguiente manera: Código : var fechaRequerida = new Date(año, mes, día, horas, minutos, segundos, milisegundos) //O con un total de milisegundos que contarán a partir del 1 de enero de 1970 //Por ejemplo 1334968890477, estaría dentro del 21 de Abril de 2012 var fechaPorMilisegundos = new Date(1334968890477) ¿Cómo funciona el objeto Date?Aquí hay varias cosas a tener en cuenta:
Código : console.log(fechaRequerida) Y la consola nos imprimirá lo siguiente en ambos casos: Date Que no es ni de lejos lo que queremos ver, aun así sabemos que contiene una fecha, pues nos lo está diciendo la consola. Así que vamos a ver los métodos y al final sabremos cómo trabajar con el objeto date. 2. Los métodos del objeto Date¿Qué son los métodos de un objeto?Que nadie se asuste, los métodos son simples funciones incluidas dentro de un objeto, que desempeñan diferentes acciones.Imaginemos que tenemos un robot, este será nuestro objeto Abducted. Abducted tiene programado un método que le hace decir algo, y otro que le dice lo que debe decir, vamos a verlo en pseudo-código: Código : Abducted { private var tipoDeFrase:Frase = 'una parida'; function get decirCosa ():Frase { return tipoDeFrase } function set queDecir (nuevoTipoDeFrase:Frase):void { tipoDeFrase = nuevoTipoDeFrase } } Código : //Ok, ahora tú me ordenarías: Abducted.decirCosa() //Y yo te respondería cual esclavo: 'van 2 y se cae el de en medio' //Como ves te estaría diciendo un parida, pues es lo que tendría configurado por defecto. //Ahora bien, tú podrías ordenarme: Abducted.queDecir('algo inteligente') //Si después me volvieras a ordenar: Abducted.decirCosa() //A diferencia de la vez anterior, yo te respondería: 'No hay nada de malo en pasar por tonto, si en realidad lo que uno está haciendo es inteligente' Como veis los métodos o funciones get sirven para pedirle datos a Abducted, sin embargo los set nos valen para cambiar una variable o propiedad de Abducted. Espero que os haya gustado mi explicación casera breve e incompleta, sobre qué son los métodos get y set de un objeto. Y si he conseguido expresarme con claridad, veremos mucho más rápido los métodos a continuación. Tipos de métodos del objeto DateVamos a intentar dividir los métodos del objeto Date en 4 grupos (esta sub-división no es ninguna convención ni nada parecido, es simplemente que me parece más sencillo explicarlo así, si sí son una convención, pues bueno, entonces he pensado lo mismo que muchos):
A. Métodos para obtener o cambiar valores del objeto DateVamos a ver rápidamente los nombres simples de estos métodos (así no se pueden usar).
Voy a tomar como ejemplo Date y Day. Los get los podemos usar de 2 maneras: Código : getDate() getUTCDate() getDay() getUTCDay() Y los set se usan igual, pero como acabo de explicar que los Day son los únicos que no tienen set, nos quedamos sin ellos en este ejemplo ya que no existen como métodos: Código : setDate() setUTCDate() Bien, alguno se preguntará ¿y qué maldita diferencia hay entre poner UTC o no ponerlo?. Como trabajamos con fechas, tenemos que tener en cuenta que ahora mismo no es la misma hora en todo el mundo. Por lo tanto cuando trabajemos con fechas, la diferencia entre ponerlo o no, radica en que si no se pone estarás usando tu franja horaria (que es lo más normal), y si lo pones pedirás esa fecha en la hora universal (UTC - Universal Time Coordinated), que es GTM+0 (La del meridiano 0 o meridiano de Greenwich) Wikipedia UTC Ahora veamos a qué dato dentro de una fecha corresponde cada uno de los métodos que acabamos de ver, e iremos viendo ejemplos: (Los links a partir de aquí, son links a ejemplos prácticos en los que podréis usar los métodos a vuestro antojo) FullYearUsos: getFullYear() | getUTCFullYear() | setFullYear() | setUTCFullYear()Código : //Obtiene el año en 4 dígitos getFullYear() getUTCFullYear() //Configura la fecha a partir de año setFullYear(año, mes, diaMes) setUTCFullYear(año, mes, diaMes) MonthUsos: getMonth() | getUTCMonth() | setMonth() | setUTCMonth()Código : //Obtiene el mes (de 0 a 11) getMonth() getUTCMonth() //Configura la fecha a partir del mes setMonth(mes, diaMes) setUTCMonth(mes, diaMes) DateUsos: getDate() | getUTCDate() | setDate() | setUTCDate()Código : //Obtienen el día del mes (de 1 a 31) getDate() getUTCDate() //Configuran la fecha con el día setDate(diaMes) setUTCDate(diaMes) DayUsos: getDay() | getUTCDay()Código : //Obtienen el día de la semana (de 0 = Domingo a 6 = sábado) getDay() getUTCDay() HoursUsos: getHours() | getUTCHours() | setHours() | setUTCHours()Código : //Obtienen las horas (de 0 a 23) getHours() getUTCHours() //Configuran la hora a partir de las horas setHours(horas, minutos, segundos, milisegundos) setUTCHours(horas, minutos, segundos, milisegundos) MinutesUsos: getMinutes() | getUTCMinutes() | setMinutes() | setUTCMinutes()Código : //Obtienen los minutos (de 0 a 59) getMinutes() getUTCMinutes() //Configuran la hora a partir de los minutos setMinutes(minutos, segundo, milisegundos) setUTCMinutes(minutos, segundos, milisegundos) SecondsUsos: getSeconds() | getUTCSeconds() | setSeconds() | setUTCSeconds()Código : //Obtienen los segundos (de 0 a 59) getSeconds() getUTCSeconds() //Configuran la hora a partir de los segundos setSeconds(segundos, milisegundos) setUTCSeconds(segundos, milisegundos) MilisecondsUsos: getMiliseconds() | getUTCMiliseconds() | setMiliseconds() | setUTCMiliseconds()Código : //Obtienen los milisegundos (de 0 a 999) getMiliseconds() getUTCMiliseconds() //Configuran la hora a partir de los milisegundos setMiliseconds(milisegundos) setUTCMiliseconds(milisegundos) Dentro de esta categoría también metería este último método setTime()Usos: setTime()Código : //setTime nos vale para configurar una fecha sumando o restando x milisegundos al milisegundo 1 del 1 de enero de 1970 //así si un día tiene 86.400.000 milisegundos, haciendo esto var mas1Dia = new Date(); mas1Dia.setTime(86400000); //Si imprimiéramos mas1Dia de una manera lectible, veríamos que mas1Dia = 2 de enero de 1970 console.log(mas1dia.toDateString()); DEVUELVE--> Fri Jan 02 1970 B. Métodos para obtener fechas legiblesBueno, ya hemos visto como configurar y modificar el objeto date, y obtener datos precisos de él, ahora vamos a ver cómo obtener estos datos de tal manera que casi cualquier humano, pueda leerlos. Los métodos para conseguir esto sin morir en el intento, siempre devuelven un string, son los siguientes:
Código : //Creamos la fecha de hoy var fechaDeHoy = new Date() //toString() devuelve el objeto completo en nuestra franja horaria console.log(fechaDeHoy.toString()); //SALIDA ---> 'Sat Apr 21 2012 04:50:14 GMT+0200 (Hora de verano romance)' //toString() devuelve el objeto completo en GMT+0 ó UTC console.log(fechaDeHoy.toUTCString()); //SALIDA ---> 'Sat, 21 Apr 2012 02:50:14' GMT' //toLocaleString() devuelve el objeto completo, de acuerdo a las convenciones locales console.log(fechaDeHoy.toLocaleString()); //SALIDA ---> 'Sat Apr 21 2012 04:50:14' GMT+0200 (Hora de verano romance)' //toTimeString() devuelve las horas minutos y segundos y franja horaria console.log(fechaDeHoy.toTimeString()); //SALIDA ---> '04:50:14' GMT+0200 (Hora de verano romance)' //toDateString() devuelve el día de la semana, día del mes, el mes, y el año console.log(fechaDeHoy.toDateString()); //SALIDA ---> 'Sat Apr 21 2012' //toLocaleDateString() devuelve el día de la semana, día del mes, el mes, y el año, de acuerdo a las convenciones locales console.log(fechaDeHoy.toLocaleDateString()); //SALIDA ---> 'Saturday, April 21, 2012' //toLocaleTimeString() devuelve las horas minutos, segundos y franja horaria, de acuerdo a las convenciones locales console.log(fechaDeHoy.toLocaleTimeString()); //SALIDA ---> '04:50:14' //toISOString devuelve la fecha formateada con el starndard ISO console.log(fechaDeHoy.toISOString()); //SALIDA ---> '2012-04-21T02:50:14.007Z' //toJSON devuelve la fecha formateada como fecha JSON console.log(fechaDeHoy.toJSON()); //SALIDA ---> '2012-04-21T02:50:14.007Z' C. Métodos para trabajar con fechas en milisegundosLos siguientes métodos nos devolverán milisegundos y todos ellos estarán basados en torno a la fecha universal del objeto Date de la que ya hemos hablado con anterioridad.(No os asustéis, al final del tuto en los ejercicios crearemos una sencilla función que nos ayudarán mucho en nuestros cálculos con milisegundos) Estos métodos son: Vale, vamos a ver de rápidamente cómo usarlos y que obtenemos de cada uno, en la última parte del tuto ya trabajaremos con las fechas Código : //Primero creamos una fecha con el día de "Hoy". var fechaHoy = new Date(); //1º - getTime() - sin parámetros console.log(fechaHoy.getTime()); //SALIDA --> 1334968890477 //2º - UTC(año, dia, mes) - 3 parámetros console.log(Date.UTC(2012, 21, 3)); //SALIDA --> 1380758400000 //3º - valueOf() - sin parámetros console.log(fechaHoy.valueOf()); //SALIDA --> 1334968890477 //4º - parse('fecha en string') - 1 parámetro console.log(Date.parse('april 21, 2012')); //SALIDA --> 1334959200000 //Hasta aquí todas las salidas que hemos recibido, son la cantidad de milisegundos desde el 1 de enero de 1970, hasta la fecha sobre la que estemos aplicando el método. //5º - getTimeZoneOffset() - sin parámetros console.log(fechaHoy.getTimezoneOffset()); //SALIDA --> -120 //Este es el único de los métodos que estamos viendo que no devuelve milisegundos, devuelve la diferencia en minutos entre nuestra franja horaria y la hora UTC, en mi caso, como estoy en GMT+2, -120 minutos D. Métodos desfasadosNo nos hace falta saber que hacen, lo único que necesitamos es que nos chirríen los ojos si lo vemos escrito por algún sitio, porque seguro que nosotros no lo ponemos.
3. EjerciciosEjercicio1 - Ejercicios sencillosEmpezaremos con unos ejercicios sencillos que no precisen de cálculos
Código : //a) var fechaHoy = new Date(); console.log(fechaHoy.toString()); console.log(''); //b) var fecha85 = new Date(fechaHoy); fecha85.setDate(85); console.log(fecha85.toString()); console.log(''); //c) var fecha187 = new Date(fechaHoy); fecha187.setDate(-187); console.log(fecha187.toString()); console.log(''); //d) fecha85.setFullYear(fecha85.getFullYear()+2); console.log(fecha85.toString()); console.log(''); //e) fecha187.setHours(fecha187.getHours()-25); console.log(fecha187.toString()); console.log(''); //f) var fechaResto = new Date(fecha85-fecha187); console.log(fechaResto.toString()); Ejercicio - Ejercicio mediosi alguna vez tenemos la necesidad de trabajar con milisegundos, ya sabemos cómo obtenerlos y como configurarlos en una fecha, ahora voy a plantear una función que facilite el trabajo con esos milisegundos.Lo primero, vamos a ver que son milisegundos y que significan en tiempo.
Código : //La preparamos para que pueda funcionar en los 2 sentidos, convertir milisegundos a unidades y unidades a milisegundos, por lo que además de la cantidad de unidades y el tipo de unidades le pasaremos un modo function convertirMilisegundos (cantidad, unidad, modo) { //Configuramos la función para que si no la pasamos exactamente 3 parámetros, nos dé una alerta if (arguments.length != 3) { //Preparamos la alerta alert('La función convertirMilisegundos requiere exactamente 3 parámetros\ncantidad, unidad, modo'); //Salimos de la función sin hacer nada más return false } //Declaramos una variable vacia donde almacenaremos el valor por el que multiplicaremos o dividiremos nuestra cantidad var valor; //Detectamos la unidad a usar e inicializamos valor switch (unidad) { case 'se': valor = 1000; break; case 'mi': valor = 60000; break; case 'ho': valor = 3600000; break; case 'di': valor = 86400000; break; case 'an': valor = 31536000000; break; } //Detectamos el modo, y devolvemos la operación switch (modo) { case 'mu': return catidad/valor; break; case 'um': return catidad*valor; break; } } Y la usaríamos así, imaginad que vuestra empresa tiene 2 objetos Date con una hora de salida y una hora de entrada de un día cualquiera y el jefe os pide la diferencia en minutos y días, después os dice que multipliquéis esas horas por 5 días que tiene la semana y se lo devolváis en milisegundos para saber cuánto habéis vagueado en el trabajo esta semana. Nosotros obedecemos como un perrito faldero. Código : //Primero tenemos los 2 objetos Date que la maldita máquina de fichar del curro no perdona a la hora de comer var horaA = new Date(2012, 3, 21, 14, 00, 00); var horaB = new Date(2012, 3, 21, 18, 26, 35); //Como veréis nos hemos retrasado un poco con la siesta //Bien, almacenamos las 2 fechas como milisegundos en nuevas variables var milisecsA = horaA.getTime(); var milisecsB = horaB.getTime(); //Y ahora a la fecha mayor le restamos la menor, para obtener el intervalo de milisegundos que hay entre las 2 var milisecInter = horaB-horaA; //Ahora nos ha pedido la diferencia en minutos y días //Muy bien, pues nosotros que somos más eficientes y más chulos que nadie, escribimos: var enMinutos = convertirMilisegundos(milisecInter, 'mi', 'mu'); console.log(enMinutos); //SALIDA --> 266.5833333333333 var enDias = convertirMilisegundos(milisecInter, 'di', 'mu'); console.log(enDias); //SALIDA --> 0.18512731481481481 //Y ahora nos ha pedido que lo multipliquemos por 5 y se lo devolvamos en milisegundos var por5 = convertirMilisegundos(enDias*5, 'di', 'um'); console.log(por5); //SALIDA --> 79975000 Y debido a nuestra eficiencia, el jefe nos perdona las siestas. Como veréis todo es bastante sencillo, espero que os haya gustado y que le saquéis provecho. Un saludo. |
You are subscribed to email updates from Cristalab To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |
No hay comentarios:
Publicar un comentario