{"id":1943,"date":"2016-02-02T17:15:56","date_gmt":"2016-02-02T22:15:56","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/icm00794\/?p=1943"},"modified":"2026-08-18T10:34:44","modified_gmt":"2026-08-18T15:34:44","slug":"s3eva2015tii_t4-orientar-codigo-qr-quick-response-code","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-s3eva20\/s3eva2015tii_t4-orientar-codigo-qr-quick-response-code\/","title":{"rendered":"s3Eva2015TII_T4 Orientar c\u00f3digo QR (Quick Response Code)"},"content":{"rendered":"\n<p><em><strong>Ejercicio<\/strong><\/em>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-3eva20\/3eva2015tii_t4-orientar-codigo-qr-quick-response-code\/\" data-type=\"post\" data-id=\"2693\">3Eva2015TII_T4 Orientar c\u00f3digo QR (Quick Response Code)<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1144\" height=\"620\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/03\/codigoQR_zoom.gif\" alt=\"Codigo QR\" class=\"wp-image-1754\" style=\"width:350px\" \/><\/figure>\n\n\n\n<p>Propuesta de soluci\u00f3n en <strong>Python<\/strong> para 3ra Eva. II T\u00e9rmino 2015 Tema 3 y 4.<\/p>\n\n\n\n<p>Los archivos para probar el algoritmo son:<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"https:\/\/www.dropbox.com\/s\/pta5iuzn7j5b39q\/codigoQR.txt?dl=0\">codigoQR.txt<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.dropbox.com\/s\/pf3art4dk3nblax\/referenciaQR.txt?dl=0\">referenciaQR.txt<\/a><\/p>\n<\/div>\n\n\n\n<p>Se empieza cargando los archivos de prueba<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 59; title: ; notranslate\" title=\"\">\ncodigo     = np.loadtxt('codigoQR.txt',dtype=int)\nreferencia = np.loadtxt('referenciaQR.txt',dtype=int)\n<\/pre><\/div>\n\n\n<p>Compare la esquina del codigoQR para determinar cual no coincide y decidir la rotaci\u00f3n usando las funciones del tema 3.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 64; title: ; notranslate\" title=\"\">\n# comparando c\u00f3digo y esquinas de referencia\n# resultados por esquina\nt,r = referencia.shape\ncompara = np.zeros(4, dtype=int)\n \nk = 0 # compara esquinas\nwhile not(k&gt;=4):\n    esquina    = extraeresquina(codigo,k,t)\n    esqgirada  = rotando(referencia,k)\n    compara&#x5B;k] = np.array_equal(esquina,esqgirada)\n    k = k + 1\n<\/pre><\/div>\n\n\n<p>La rotaci\u00f3n se define con el resultado de comparar las esquinas<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 76; title: ; notranslate\" title=\"\">\n# Selecciona la rotacion\nif (compara&#x5B;0]==1 and compara&#x5B;1]==1\n    and compara&#x5B;2]==0 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,0)\n     \nif (compara&#x5B;0]==1 and compara&#x5B;1]==0\n    and compara&#x5B;2]==1 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,1)\n     \nif (compara&#x5B;0]==0 and compara&#x5B;1]==1\n    and compara&#x5B;2]==1 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,2)\n     \nif (compara&#x5B;0]==1 and compara&#x5B;1]==1\n    and compara&#x5B;2]==1 and compara&#x5B;3]==0):\n    orientado = rotando(codigo,3)\n<\/pre><\/div>\n\n\n<p>El algoritmo integrado se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 3Eva2015TII_T4 Orientar c\u00f3digo QR (Quick Response Code)\n# version con lazos y condicionales. \n# tarea: simplificar lazos con 'for'\nimport numpy as np\n\n# 3Eva2015TII_T3 funciones matrices rotar, extraer \n# literal a\ndef rotando(matriz,k):\n    matriz = np.array(matriz)\n     \n    cuenta = 0  #cuenta rotaciones\n    while not(cuenta&gt;=k):\n        n,m = matriz.shape\n        tabla = np.zeros(shape=(m,n),dtype=int)\n         \n        i = 0   # inicia rotaci\u00f3n\n        while not(i&gt;=n):\n            j = 0\n            while not(j&gt;=m):\n                f = j\n                c = (n-1)-i\n                tabla&#x5B;f,c] = matriz&#x5B;i,j]\n                j = j + 1\n            i = i + 1\n         \n        matriz = np.copy(tabla)\n        cuenta = cuenta + 1\n    return(matriz)\n \n# literal b\ndef extraeresquina(matriz,k,t):\n    matriz = np.array(matriz)\n    n,m = matriz.shape\n    esquina = np.zeros(shape=(t,t), dtype=int)\n    i = 0\n    while not(i&gt;=t):\n        j = 0\n        while not(j&gt;=t):\n            if (k==0): # superior izquierda\n                f = i\n                c = j\n            if (k==1): # superior derecha\n                f = i\n                c = (m-t)+j\n            if (k==2): # inferior derecha\n                f = (n-t)+i\n                c = (m-t)+j\n            if (k==3): # inferior izquierda\n                f = (n-t)+i\n                c = j\n            esquina&#x5B;i,j]=matriz&#x5B;f,c]\n            j = j+1\n        i = i+1  \n    return(esquina)\n \n# Tema 4 ------------------------------\n# Programa para orientar el codigo QR\n# INGRESO por lectura desde un archivo\ncodigo     = np.loadtxt('codigoQR.txt',dtype=int)\nreferencia = np.loadtxt('referenciaQR.txt',dtype=int)\n \n# PROCEDIMIENTO\n \n# comparando c\u00f3digo y esquinas de referencia\n# resultados por esquina\nt,r = referencia.shape\ncompara = np.zeros(4, dtype=int) \n \nk = 0 # compara esquinas\nwhile not(k&gt;=4):\n    esquina    = extraeresquina(codigo,k,t)\n    esqgirada  = rotando(referencia,k)\n    compara&#x5B;k] = np.array_equal(esquina,esqgirada)\n    k = k + 1\n     \n# Selecciona la rotacion\nif (compara&#x5B;0]==1 and compara&#x5B;1]==1\n    and compara&#x5B;2]==0 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,0)\n     \nif (compara&#x5B;0]==1 and compara&#x5B;1]==0\n    and compara&#x5B;2]==1 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,1)\n     \nif (compara&#x5B;0]==0 and compara&#x5B;1]==1\n    and compara&#x5B;2]==1 and compara&#x5B;3]==1):\n    orientado = rotando(codigo,2)\n     \nif (compara&#x5B;0]==1 and compara&#x5B;1]==1\n    and compara&#x5B;2]==1 and compara&#x5B;3]==0):\n    orientado = rotando(codigo,3)\n \n# SALIDA\nprint('codigo orientado:')\nprint(orientado)\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code\"><code>codigo orientado:\n&#091;&#091;1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1]\n &#091;1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1]\n &#091;1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1]\n &#091;1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1]\n &#091;0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0]\n &#091;1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]\n &#091;1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0]]<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 3Eva2015TII_T4 Orientar c\u00f3digo QR (Quick Response Code) Propuesta de soluci\u00f3n en Python para 3ra Eva. II T\u00e9rmino 2015 Tema 3 y 4. Los archivos para probar el algoritmo son: codigoQR.txt referenciaQR.txt Se empieza cargando los archivos de prueba Compare la esquina del codigoQR para determinar cual no coincide y decidir la rotaci\u00f3n usando las [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-fp-ejemplos","format":"standard","meta":{"footnotes":""},"categories":[143],"tags":[58,157],"class_list":["post-1943","post","type-post","status-publish","format-standard","hentry","category-fp-s3eva20","tag-ejemplos-python","tag-fundamentos-programacion"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=1943"}],"version-history":[{"count":8,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1943\/revisions"}],"predecessor-version":[{"id":25470,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1943\/revisions\/25470"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=1943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=1943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=1943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}