WEBVTT 00:00:00.000 --> 00:00:04.853 En esta sección, vamos a agregar lo que se denominan expresiones al código que tenemos 00:00:04.853 --> 00:00:09.590 disponible. Y eso es como la última pieza que necesitábamos para comenzar a escribir, tú sabes, 00:00:09.590 --> 00:00:14.093 código de manipulación de imagen un poco realista. Y, en particular por el final de esta 00:00:14.093 --> 00:00:19.006 sección jugaremos con rompecabezas que se basan en imágenes así que, eso será un poco divertido. 00:00:19.006 --> 00:00:23.860 Así que, hemos escrito código como esto muchas veces. Entonces, aquí dice . Nosotros 00:00:23.860 --> 00:00:28.246 tenemos un número, 40 o 100 o 250 o lo que sea y está en el código. 00:00:28.246 --> 00:00:32.866 Resulta que en su lugar puedes escribir de esta manera. Entonces aquí dice . Y el 00:00:32.866 --> 00:00:37.408 11 + 31 aquí, eso se llama una expresión. Y básicamente, en lugar de un 00:00:37.408 --> 00:00:42.872 número fijo que se conoce de antemano, podemos poner una pequeña, una pequeña 00:00:45.440 --> 00:00:48.007 expresión aritmética. Así que en este caso,11 + 31, es un pequeño problema. La forma en que esto funciona 00:00:48.007 --> 00:00:52.919 es que, cuando el computador se ejecuta, cuando llega a esta línea. Lo primero que 00:00:52.919 --> 00:00:57.058 va a hacer, es, se dice que va a evaluar la expresión. Por lo que sólo escoge la 00:00:57.058 --> 00:01:01.364 expresión, y dice bien. Bien, tengo que averiguar qué número se trata. En 00:01:01.364 --> 00:01:05.172 este caso, sólo hace la adición, por lo tanto, 11 + 3, es 42. Así que una vez la 00:01:05.172 --> 00:01:09.478 expresión ha sido evaluada a un número 42, el código puede continuar, 00:01:09.478 --> 00:01:13.837 y sólo tiene que utilizar ese número. Así pues, en efecto, esto sólo imprime 42. Y así en cualquier lugar 00:01:13.837 --> 00:01:18.191 del código donde habríamos tenido un número, como 0 o 255 o 100 o algo 00:01:18.356 --> 00:01:23.041 en su lugar vamos a ser capaces de poner pequeñas expresiones aritméticas a efectos de incorporar un 00:01:23.041 --> 00:01:27.609 poco de computación para calcular qué número queremos que utilice. Eso nos 00:01:27.609 --> 00:01:33.157 va a permitir resolver mejor los problemas. Bien, no hemos hablado de eso por ahora, pero 00:01:33.157 --> 00:01:38.894 el píxel tiene estas tres funciones adicionales. Está y lo que 00:01:38.894 --> 00:01:43.811 hace es, es una especie de reverso de . Recupera el número del 00:01:43.811 --> 00:01:49.043 píxel. Así que hay algún valor rojo; 0 o 100 o algo. Esto lo recupera. 00:01:49.043 --> 00:01:54.150 Y están también y . Así que va a ser muy 00:01:54.150 --> 00:01:59.217 natural utilizar estos en expresiones para meterse con los valores RGB de un píxel. Así que 00:01:59.217 --> 00:02:04.357 supongamos que lo que quiero hacer es doblar el valor rojo de un píxel, por lo que si es 50 quisiera 00:02:04.357 --> 00:02:08.846 hacerlo un 100 y si es un 100 quiero hacerla un 200 o lo que sea. Así que aquí hay algo de código 00:02:08.846 --> 00:02:13.390 que hace eso por lo que voy a pasar esto y esta idea de hacer un relativo 00:02:13.390 --> 00:02:18.103 cambio a un píxel es cambio que usted sabe lo triple o algo parecido 00:02:18.103 --> 00:02:22.479 ese,que va a ser una forma mucho más realista para hacer frente a los valores RGB 00:02:22.479 --> 00:02:27.085 de los pixeles. Ahora veamos lo que hace este código. Entonces esta cita es correcta. 00:02:27.085 --> 00:02:31.672 Dobla el valor rojo de un píxel. Así que lo que la primera línea hace, es, llama a . 00:02:31.672 --> 00:02:36.246 Así se va a recuperar el número fuera. Y vamos a decir, en este 00:02:36.246 --> 00:02:40.646 caso, que el valor rojo es 50. Así, , va a recuperar el 50. 00:02:40.646 --> 00:02:45.046 Y entonces, aquí, estamos utilizando el signo igual de la manera que hacíamos antes, para 00:02:45.046 --> 00:02:49.446 almacenar ese número en una variable. Voy a, voy a llamarla "old" (viejo), por el, el antiguo 00:02:49.446 --> 00:02:54.194 valor. Así que, básicamente, esto sólo almacena 50 en "old". Así entonces, la siguiente línea dice 00:02:54.194 --> 00:02:58.481 . Así que aquí, estoy usando la expresión. Y recuerda, la 00:02:58.481 --> 00:03:02.635 manera en que funciona es, cuando llega a esta línea, la primer cosa que va a hacer 00:03:02.635 --> 00:03:06.841 es evaluar la expresión. Por lo que va a mirar "old" multiplicado por dos. "Old", recuerda tiene 00:03:06.841 --> 00:03:10.790 almacenado 50. Así que, básicamente, esto dice 50 veces dos, se va a evaluar eso, devolverá 100. 00:03:10.790 --> 00:03:14.944 Por lo tanto evalúa la expresión para llegar a 100. Y ahora que tiene 00:03:14.944 --> 00:03:18.944 ese valor, entonces puede seguir adelante y ejecutar el código. Y eso es lo que dice , 00:03:18.944 --> 00:03:23.995 esencialmente 100. Así que si piensas a través de toda la secuencia, básicamente esto 00:03:23.995 --> 00:03:28.825 saca el 50, multiplica por dos para obtener 100 y almacena eso de nuevo. 00:03:28.825 --> 00:03:35.152 Entonces en efecto, se multiplica por dos. Ahora. En realidad esta es la manera en que vamos a escribirlo. 00:03:35.152 --> 00:03:39.212 Todo esto se puede condensar a sólo una línea porque, realmente esa, 00:03:39.212 --> 00:03:42.907 esa variable "old" de ahí, no estaba añadiendo mucho. Sólo fue como una 00:03:42.907 --> 00:03:47.123 cosa temporal. Y así que imaginemos ese mismo caso de píxel donde el 00:03:47.123 --> 00:03:51.235 valor rojo es 50, y yo sólo voy a ejecutar esto. Sólo lo he condensado a una línea. 00:03:51.235 --> 00:03:55.503 Así, imaginemos este código ejecutándose. Entonces, tengo un píxel realmente, aquí lo 00:03:55.503 --> 00:03:59.459 tengo. Píxel con rojo de 50 y voy a ejecutar esta línea. Así que la primera cosa 00:03:59.459 --> 00:04:03.831 que va a hacer es darse cuenta que hay una expresión aquí, 00:04:03.831 --> 00:04:08.194 dos veces. Así, se va a evaluar esa expresión. Así que 00:04:08.194 --> 00:04:12.652 vas a ir a buscar lo que es actualmente el valor rojo. Digamos 50. Por lo que dirá, 00:04:12.652 --> 00:04:17.406 es el misma matemáticas que teníamos antes, 50 veces 2. Eso es 100. Y entonces con 00:04:17.406 --> 00:04:22.161 ese valor 100, esencialmente va a llamar de 100 para poner eso de nuevo. 00:04:22.161 --> 00:04:27.153 Así que funciona como la misma dinámica por la que pasamos. Por lo que obtiene el 00:04:27.153 --> 00:04:31.964 valor, multiplica por dos y lo pone de nuevo. O, en efecto 00:04:31.964 --> 00:04:36.891 se duplica el valor rojo. Así que voy a hacer un montón de ejemplos que siguen, con este patrón. 00:04:36.891 --> 00:04:44.265 Así que lo vamos a ver. Como voy a empezar a usar esto dentro de bucles 00:04:44.265 --> 00:04:51.270 como anteriormente habíamos hecho le sabemos decir cero o 250 tuvimos algunos número fijo pero ahora 00:04:51.270 --> 00:04:56.872 vamos a escribir código y éste es el ejemplo que acabo de hacer. Código como este donde 00:04:56.872 --> 00:05:02.475 vamos a cambiar el valor rojo basado en lo que era el valor rojo antes. Y entonces 00:05:02.475 --> 00:05:08.146 la dinámica es, vamos a tener, ya sabes, muy a menudo vamos a decir y entonces 00:05:08.146 --> 00:05:13.680 en el paréntesis vamos a llamar a y luego cierta aritmética. Por lo tanto 00:05:13.680 --> 00:05:18.966 en este caso, esta línea duplica el valor rojo, o en última instancia, esta línea llama a 00:05:18.966 --> 00:05:23.795 de 0.5 veces. Entonces está tomando el valor viejo 00:05:23.795 --> 00:05:28.318 y multiplicarlo 0.5 veces o esencialmente dividir por dos, por eso va a 00:05:28.318 --> 00:05:33.391 hacerlo más pequeño y, a continuación, colocarlo de nuevo. Así,eso es todo, seguiremos 00:05:33.391 --> 00:05:38.341 ese patrón, un montón de veces. Así que permítanme llegar a un ejemplo real, aquí. Supongamos que yo, 00:05:38.341 --> 00:05:42.999 yo voy a tomar la imagen de la flor. Y digamos que quiero que se vea 00:05:42.999 --> 00:05:47.737 más naranja. Por lo mi estrategia va a ser, bueno, vamos a cambiar el valor de verde. Vamos a 00:05:47.737 --> 00:05:51.756 apenas bajar el verde. Y así, matemáticamente, voy a decir, vamos a 00:05:51.756 --> 00:05:55.654 cambiar el verde para que este al 75% de lo que era. Ahora, en este ejemplo, 00:05:55.834 --> 00:06:00.573 realmente he comenzado la página con ningún código en ella. Por lo que voy a escribirlo ahora. 00:06:00.573 --> 00:06:05.011 Así digo píxel, por lo tanto, si quiero cambiar el verde al 75% de 00:06:05.011 --> 00:06:09.570 lo que era. Y esto es, sabes, alguno del ejemplo que mostré. Diré 00:06:09.570 --> 00:06:14.189 . También puedes escribir esto fuera [inaudible] entones, quiero llamar a 00:06:14.189 --> 00:06:19.123 y quiero poner aquí algún tipo de expresión, la quiero 00:06:19.123 --> 00:06:23.551 para calcular un número que quiero devolver para el valor verde. Por lo que el patrón 00:06:23.551 --> 00:06:28.204 que voy a usar aquí es , voy a obtener el valor antiguo y 00:06:28.204 --> 00:06:32.689 entonces puedo, tú sabes, multiplicar tantas veces. En este caso multiplicar 0.75 00:06:32.689 --> 00:06:37.615 veces. Así voy cambiarlo a tres cuartas partes de lo que era. Así que vamos 00:06:37.615 --> 00:06:42.818 a probar eso. Ah, vale. Entonces hace que sea, si recuerdan era 00:06:43.010 --> 00:06:49.062 como amarillo. Realmente si pongo 1.0 aquí, no podemos hacer ningún cambio. Bueno, eso era 00:06:49.062 --> 00:06:53.830 cuando era agradable y amarillo. Entonces aquí esta tu 0.75 de nuevo. 00:06:53.830 --> 00:06:57.867 Entonces tenemos un poco más de naranja. Debo decir, para estos ejemplos voy a, 00:06:57.867 --> 00:07:01.954 sólo voy a tomar el tiempo para escribir el código. Y puedes hacerlo si lo deseas 00:07:01.954 --> 00:07:06.092 al volver sobre esto mismo. Hay un pequeño botón de "mostrar solución" aquí abajo. Por lo tanto, 00:07:06.243 --> 00:07:09.977 si vienes a la revisión posterior, el código de la solución está disponible. Pero, solo 00:07:09.977 --> 00:07:14.014 sentía como practicar propósitos. Es mejor comenzar con una pantalla en blanco. Y entonces 00:07:14.014 --> 00:07:18.051 realmente pasar por el proceso de escribir el código. Por lo tanto, todos estos ejemplos seguirán 00:07:18.051 --> 00:07:22.621 ese patrón. Vamos a intentar algo un poco más difícil. Entonces esto dice 00:07:22.882 --> 00:07:29.753 poner el rojo, verde y azul cada uno a 0.75 de sus valores originales y, a continuación, intentaremos 00:07:30.014 --> 00:07:37.171 con 0.5 y 0.25. ¿Qué voy a hacer?. Una GRAN tradición de ciencias de la computación, es en lugar 00:07:37.171 --> 00:07:43.340 de escribir el código absolutamente desde el principio, yo voy a copiarlo, el que hice 00:07:43.340 --> 00:07:49.665 antes y sólo voy a pegarlo. Voy a hacer tres copias del mismo, y luego lo arreglamos 00:07:49.665 --> 00:07:56.067 para hacer lo que quiera aquí. Está bien, así que normalmente siempre voy en orden, rojo, verde, azul. 00:07:56.067 --> 00:08:02.269 Así que voy a decir para y, lo que hice decir a 0.75. Bueno, por lo que 00:08:02.269 --> 00:08:07.980 eso, eso es una buena. Y, a continuación, decimos para obtener verde 0.75 veces. 00:08:07.980 --> 00:08:13.548 Y entonces, haremos azul al final. Así , . Puedes ver una especie de 00:08:13.548 --> 00:08:18.903 patrón aquí del y siendo combinados. Eso está muy bien. Es un muy 00:08:18.903 --> 00:08:24.249 factible patrón. Así que voy a ejecutarlo así. Sí, es un poco sutil pero lo 00:08:24.249 --> 00:08:28.916 que ha hecho, es tomar la imagen original y hacerla un poco más oscura. Porque si 00:08:28.916 --> 00:08:33.468 piensas sobre eso, multiplicar por 0.75 estamos como moviendo todo hacia 00:08:33.468 --> 00:08:37.962 cero y evidentemente cero, cero es negro puro, por lo que nosotros estamos como comprimiendo así. 00:08:37.962 --> 00:08:42.599 Así que vamos a intentar hacerlo un poco extremo. Así, podrá multiplicarse 0.5 veces y 00:08:42.599 --> 00:08:48.095 voy a ejecutar eso. Oh, es un poco más oscuro. Y si casi por 0.25 tan sólo un cuarto de 00:08:48.095 --> 00:08:53.591 los valores originales. Ah, entonces sí, entonces se está haciendo bastante oscuro. Por lo tanto, esto demuestra 00:08:53.591 --> 00:08:59.427 un realista e interesante uso de este tipo de idea de escala de usar 00:08:59.427 --> 00:09:05.058 combinado con y multiplicarlo tantas veces para jugar 00:09:05.058 --> 00:09:10.134 con los valores. Escalar hacia arriba o escalar hacia abajo. Muy bien. Así que hay un, 00:09:10.134 --> 00:09:13.721 un tercer problema aquí, yo voy a saltarlo. Este es sólo para práctica extra, 00:09:13.721 --> 00:09:17.548 si quieres ven y prueba este y tiene un, tiene un código de solución 00:09:17.548 --> 00:09:21.960 también. Así que lo que realmente quiero hacer, es trabajar uno de estos 5-10-20 00:09:21.960 --> 00:09:27.560 puzzles(rompecabezas). Así que la idea con el rompecabezas 5-10-20 es que hubo alguna 00:09:27.560 --> 00:09:33.378 imagen de una flor, pieza de fruta o algo y se ha modificado 00:09:33.378 --> 00:09:39.268 y se ha modificado de manera que los valores rojos, verdes y azules han sido todos divididos por 00:09:39.268 --> 00:09:44.868 cinco, diez o veinte. Por lo que los valores son mucho más pequeños, las imágenes podrían ser 00:09:44.868 --> 00:09:50.016 realmente oscuras y el desafío, es multiplicar los valores rojos, verdes y azules 00:09:50.016 --> 00:09:54.894 por cinco, diez o veinte. Esencialmente "deshacer" el oscurecimiento 00:09:54.894 --> 00:10:01.216 para de algún modo regresar la imagen. Y así. Así como esto solo [inaudible] sólo desciende a algunos 00:10:01.216 --> 00:10:05.783 experimentando y jugando un poco para tratar de averiguar cómo obtener la 00:10:05.783 --> 00:10:10.295 imagen de nuevo. Entonces el número cinco se utiliza una vez, el número diez una vez y el 00:10:10.295 --> 00:10:14.587 número veinte se utiliza una vez, así que básicamente sólo tienes que averiguar cuál 00:10:14.587 --> 00:10:19.264 va con qué color. Y debo decir, sabes hay sólo seis posibles formas de 00:10:19.264 --> 00:10:23.721 tener cinco diez y veinte por lo que no hay realmente mucho por lo que pasar. La 00:10:23.721 --> 00:10:28.508 forma en que pienso es bueno quizas puedes imaginar los cinco primero es rojo y 00:10:28.508 --> 00:10:33.182 así está bien, cinco es la primera y entonces es bien cinco, diez, veinte. O 00:10:33.182 --> 00:10:37.374 cinco, veinte, diez. Así que si cinco es la primera hay sólo dos posibilidades y entonces 00:10:37.374 --> 00:10:40.778 Asimismo si diez primeros hay sólo dos posibilidades y si veinte es la primera 00:10:40.778 --> 00:10:44.009 hay es sólo dos posibilidades, así que es una forma puede tipo de organización 00:10:44.009 --> 00:10:48.781 mientras tu buscas a través de este, bien permítanme permítanme volver aquí. Como ya he dicho 00:10:48.781 --> 00:10:55.588 antes y agarrar, una copia de mi código así no empezamos con nada. Bueno, en 00:10:55.588 --> 00:11:00.888 este caso lo que tenemos es un, un plátano. En realidad, aquí, voy a, voy a comentar estas] 00:11:00.888 --> 00:11:06.066 líneas fuera por un segundo, por lo que sólo podemos ver lo que ve la imagen con nada. Por lo tanto 00:11:06.066 --> 00:11:10.936 existe la imagen de rompecabezas. Y lo que muestra-, te voy a decir. Hay una banana 00:11:10.936 --> 00:11:15.929 amarilla y está sobre un fondo de ladrillo rojo oscuro. Y entre los ladrillos rojos, 00:11:15.929 --> 00:11:20.738 hay un poco de musgo verde que se puede ver. Así que si se fija la imagen, nos 00:11:20.738 --> 00:11:26.287 debería poder ver todas esas cosas. Para corregir la imagen. Lo que quiero hacer aquí 00:11:26.287 --> 00:11:31.162 es multiplicar. Permite, sólo me va a... Voy a empezar sólo con cinco, diez, veinte como 00:11:31.162 --> 00:11:36.294 estos. Así que vamos a decir, bien vamos a adivinar que el rojo debe ser multiplicado por cinco, 00:11:36.294 --> 00:11:41.234 necesita ser multiplicado por diez el verde y el azul tiene que ser multiplicado por 00:11:41.234 --> 00:11:45.501 veinte. Su sólo una suposición. Por tanto, si hago eso. Mm-hm, bien, bien, que 00:11:45.501 --> 00:11:50.421 claramente equivocada, verdad? El banano no se ve muy bien. Y los ladrillos tienen esto 00:11:50.421 --> 00:11:55.342 elenco de azul, por lo no es bueno. Así que voy, me quedo con la suposición de que 00:11:55.342 --> 00:11:59.959 los cinco es el primero, aunque. Y voy a tratar otra permutación. Muy bien, así que, bien 00:11:59.959 --> 00:12:05.618 tal vez es cinco, veinte, diez. Así lo probaré así. Ah, y eso es peor. 00:12:05.618 --> 00:12:11.343 [risa] >> Bien. Por lo tanto, no creo que los cinco es el primero. Cuando traté de las dos maneras 00:12:11.343 --> 00:12:20.603 con los cinco primeros. Así que vamos a tratar de los diez primeros, así que voy a tratar de diez. 520. Bien, por lo que 00:12:20.603 --> 00:12:26.014 Sólo estoy escala estos. Ew, hm. ¿Bueno, quiero decir que creo que estamos recibiendo, derecho? Quiero 00:12:26.014 --> 00:12:31.493 decir el plátano parece bastante bueno, pero obviamente son los ladrillos, que sabemos no es 00:12:31.493 --> 00:12:36.430 purpura. [risa] Se supone que es rojo. Así que permítanme intentar, estoy 00:12:36.430 --> 00:12:41.976 va a intentar dejando los cinco en el medio y sólo poniendo el 20 primero. Veinte, 00:12:41.976 --> 00:12:47.548 cinco, diez, vamos a intentar que. Allí lo tenemos. Existe la banana, se ve bonita y 00:12:47.548 --> 00:12:53.158 amarilla. Puede ver los ladrillos tienen este color rojo oscuro. Y, a continuación, incluso un poco 00:12:53.158 --> 00:12:58.492 de musgo verde aquí. Eso es tranquilizador. Así que voy a acercar esto, 00:12:58.492 --> 00:13:03.750 para poder mostrarte. [inaudible] algunas, algunas de las cualidades de la misma. Entonces parcialmente esta, 00:13:03.750 --> 00:13:08.288 esta el ladrillo. Y el musgo y los plátanos se ven bien. Sólo hay una 00:13:08.288 --> 00:13:12.540 cosa menor, pero usted verá hay tipo de un, consulte hay una especie de este banding horizontal 00:13:12.540 --> 00:13:17.453 en el plátano y está bien es que es el aspecto de la solución 00:13:17.453 --> 00:13:22.695 cuando tu la haces rápidamente. Eso está sucediendo porque cuando el rojo, verde y azul cuando 00:13:22.695 --> 00:13:27.875 fueron divididos por este número por diez o quizás veinte todos aquellos valores que 00:13:27.875 --> 00:13:33.117 normalmente van a cero a cincuenta cinco que se comprimen hasta que quizás sólo van 00:13:33.117 --> 00:13:37.737 cero a cero a veinte cuatro o doce. Y como resultado... Porque eran 00:13:37.737 --> 00:13:41.850 comprimido a ese rango, hubo pocos matices de amarillo disponible, 00:13:41.850 --> 00:13:45.963 Cuando se fue comprimida abajo como ese. Y aun cuando ampliamos lo copia de seguridad, estamos 00:13:45.963 --> 00:13:50.077 sigue atascado con sólo esos pocos matices. Eso es lo que estamos viendo en estos 00:13:50.077 --> 00:13:53.826 banda horizontal, existe, hubo pocos tonos diferentes 00:13:53.826 --> 00:13:58.043 amarillo. Y eso no se ha podido capturar. Voy a ampliar un poco. Es incapaz de 00:13:58.043 --> 00:14:02.642 captura. Estudios gradaciones reales, los que se desee. Y eso es sólo una especie de, 00:14:02.642 --> 00:14:07.485 un artefacto de la forma, el que trabaja este ejercicio. Muy bien. Así, los ejercicios que 00:14:07.485 --> 00:14:11.998 siguen en esta sección son realmente poco más de estos cinco, diez, veinte puzzles. Por lo tanto, 00:14:11.998 --> 00:14:13.980 es algo que debes chequear.