{"id":2427,"date":"2018-09-12T06:38:50","date_gmt":"2018-09-12T11:38:50","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=2427"},"modified":"2026-04-05T21:02:40","modified_gmt":"2026-04-06T02:02:40","slug":"s3eva2018ti_t1-interseccion-de-dos-circulos","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s3eva20\/s3eva2018ti_t1-interseccion-de-dos-circulos\/","title":{"rendered":"s3Eva2018TI_T1 Intersecci\u00f3n de dos c\u00edrculos"},"content":{"rendered":"\n<p><em><strong>Ejercicio<\/strong><\/em>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-3eva20\/3eva2018ti_t1-interseccion-de-dos-circulos\/\" data-type=\"post\" data-id=\"2425\">3Eva2018TI_T1 Intersecci\u00f3n de dos c\u00edrculos<\/a><\/p>\n\n\n\n<p>Para la soluci\u00f3n se presentan dos secciones:<\/p>\n\n\n\n<p><a href=\"#solucionEjercicio\">1. Soluci\u00f3n particular de intersecci\u00f3n de c\u00edrculos<\/a><\/p>\n\n\n\n<p><a href=\"#intersecta2circulos\">2. Soluci\u00f3n General de intersecci\u00f3n de c\u00edrculos<\/a><\/p>\n\n\n\n<p><a id=\"solucionEjercicio\"><\/a>_<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"solucionEjercicio\">1. Soluci\u00f3n Particular de intersecci\u00f3n de c\u00edrculos<\/h2>\n\n\n\n<p>La soluci\u00f3n particular se enfoca en el enunciado del ejercicio presentado<\/p>\n\n\n\n<p><strong>Literal a<\/strong><\/p>\n\n\n\n<p>Se realiza la gr\u00e1fica las funciones usando <strong>Python<\/strong>, para encontrar el rango de b\u00fasqueda de ra\u00edces.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"426\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2018\/09\/intersectaCirculos01.png\" alt=\"intersecta C\u00edrculos\" class=\"wp-image-17677\" \/><\/figure>\n\n\n\n<p>De la gr\u00e1fica se usa el 'zoom' y se puede aproximar los valores para la intersecci\u00f3n de las curvas estimando ra\u00edces en x=1.80 y x=3.56<\/p>\n\n\n\n<p><em><strong>Desarrollo num\u00e9rico<\/strong><\/em><\/p>\n\n\n\n<p>Se usan las ecuaciones para encontrar la diferencia entre las funciones.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (x-4)^2 + (y-4)^2 = 5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x^2 + y^2 = 16 <\/span>\n\n\n\n<p>Se despeja la variable <strong>y<\/strong> para la primera ecuaci\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (y-4)^2 = 5 - (x-4)^2 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y-4 = \\sqrt{5 - (x-4)^2} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x) = y = \\sqrt{5 - (x-4)^2} + 4 <\/span>\n\n\n\n<p>la segunda ecuaci\u00f3n se transforma en<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x^2 + y^2 = 16 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y^2 = 16 - x^2 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> g(x) = y = \\sqrt{16 - x^2} <\/span>\n\n\n\n<p>La intersecci\u00f3n se obtiene restando las ecuaciones, para f(x) se usa la parte inferior del circulo y para g(x) la parte superior de circulo.<\/p>\n\n\n\n<p>Para buscar las ra\u00edces se analiza en el rango de existencia entre las dos funciones:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> [-4,4]\\text{ y } [4 -\\sqrt{5} ,4 + \\sqrt{5}] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> [-4,4] \\text{ y } [1.7639 , 6.2360] <\/span>\n\n\n\n<p>por lo que la diferencia existe en el rango:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> [1.7639 ,4] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\text{diferencia}(x) = f(x)-g(x) <\/span>\n\n\n\n<p>que es el que se usa para el literal b<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2018\/09\/intersectacirculos02diferencia.png\" alt=\"intersecta c\u00edrculos 02 diferencia\" class=\"wp-image-18593\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><strong>Literal b<\/strong><\/p>\n\n\n\n<p>Las ecuaciones para la diferencia entre las funciones son :<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_{2} (x) = -\\sqrt{5-(x-4)^2}+4 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> g_{1} (x) = \\sqrt{16-x^2} <\/span>\n\n\n\n<p>Para el m\u00e9todo de Newton-Raphson se requieren las derivadas:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{d f_2}{dx} = \\frac{x-4}{ \\sqrt{5-(x-4)^2} } <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{d g_{1}}{dx} = \\frac{-x}{ \\sqrt{16-x^2} } <\/span>\n\n\n\n<p>por lo que:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{d \\text{diferencia}}{dx} = \\frac{d f_{2}}{dx} - \\frac{d g_{1}}{dx} <\/span>\n\n\n\n<p>Usando el algoritmo con Python se obtienen las raices:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;usando Newton-Raphson\nraices en:  1.80582463574 3.56917099898<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Desarrollo en <strong>Python<\/strong>:<\/h3>\n\n\n\n<p>El desarrollo se realiza por partes, en el mismo orden del planteamiento de&nbsp; los literales<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 3ra Evaluaci\u00f3n I T\u00e9rmino 2018\n# Tema 1. Intersecci\u00f3n de c\u00edrculos\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# literal a\n\nfx1 = lambda x: np.sqrt(5-(x-4)**2)+4\nfx2 = lambda x: -np.sqrt(5-(x-4)**2)+4\ngx1 = lambda x: np.sqrt(16-x**2)\ngx2 = lambda x: -np.sqrt(16-x**2)\n\n# Rango inicial de an\u00e1lisis (visual)\na = -5; b = 7\nmuestras = 501\n\n# PROCEDIMIENTO\n# Evalua los puntos en el rango\nxi = np.linspace(a,b,muestras)\nfx1i = fx1(xi)\nfx2i = fx2(xi)\ngx1i = gx1(xi)\ngx2i = gx2(xi)\n\n# SALIDA - Gr\u00e1fica\nplt.plot(xi,fx1i)\nplt.plot(xi,fx2i)\nplt.plot(xi,gx1i)\nplt.plot(xi,gx2i)\nplt.xlabel('x')\nplt.ylabel('y')\nplt.title('Intersecci\u00f3n de c\u00edrculos')\nplt.grid()\nplt.show()\n\n# GRAFICAR las diferencias\na = 4 - np.sqrt(5)\nb = 4 + np.sqrt(5)\n# PROCEDIMIENTO\nxi = np.linspace(a,b,muestras)\ndiferencia = fx2(xi) - gx1(xi)\n# GRAFICA\nplt.plot(xi,diferencia)\nplt.axhline(0)\nplt.xlabel('x')\nplt.ylabel('y')\nplt.title('diferencia entre c\u00edrculos')\nplt.grid()\nplt.show()\n\n# literal b -----------------------\ndef newton_raphson(funcionx, fxderiva, xi, tolera):\n    # funci\u00f3nx y fxderiva en forma num\u00e9rica\n    # xi es el punto inicial de b\u00fasqueda\n    tramo = abs(2*tolera)\n    while (tramo&gt;=tolera):\n        xnuevo = xi - funcionx(xi)\/fxderiva(xi)\n        tramo = abs(xnuevo-xi)\n        xi = xnuevo\n    return(xi)\n\nfuncionx = lambda x: fx2(x) - gx1(x)\nfxderiva = lambda x: (x-4)\/np.sqrt(5-(x-4)**2)+x\/np.sqrt(16-x**2)\n\ntolera = 0.001\nxi1 = a + tolera\nxi2 = 3.5\n\nraiz1 = newton_raphson(funcionx, fxderiva, xi1, tolera)\nraiz2 = newton_raphson(funcionx, fxderiva, xi2, tolera)\n\n# SALIDA\nprint('\\n usando Newton-Raphson')\nprint('raices en: ', raiz1,raiz2)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"intersecta2circulos\">2. Soluci\u00f3n General de intersecci\u00f3n de c\u00edrculos<\/h2>\n\n\n\n<p>Una soluci\u00f3n m\u00e1s general de la intersecci\u00f3n de c\u00edrculos, considerada como para una actividad de mayor duraci\u00f3n, revisa previamente si existe un cruce de \u00e1reas entre los dos c\u00edrculos y estima el intervalo donde se encuentran las ra\u00edces [xa,xb].<\/p>\n\n\n\n<p>De existir esa posibilidad, con el intervalo anterior&nbsp; [xa,xb] busca por un m\u00e9todo de b\u00fasqueda de ra\u00edces las coordenadas de la intersecci\u00f3n de las circunferencias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Buscar cruce de \u00e1reas entre dos c\u00edrculos<\/h3>\n\n\n\n<p>El cruce de \u00e1reas entre dos c\u00edrculos se determina comparando si la distancia entre la suma de los radios es mayor o igual a la distancia entre los centros de los c\u00edrculos.<\/p>\n\n\n\n<p>De cumplirse la condici\u00f3n anterior, es posible encontrar las intersecciones de los c\u00edrculos. El valor xa se obtiene como el mayor entre los l\u00edmites x hacia la izquierda de cada c\u00edrculo, mientras que xb se obtiene como el l\u00edmite x hacia la derecha entre los c\u00edrculos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"426\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2018\/09\/intersectaCirculos01.png\" alt=\"intersecta C\u00edrculos\" class=\"wp-image-17677\" \/><\/figure>\n\n\n\n<p>Lo siguiente que hay que reconocer es cu\u00e1l de las partes (superior e inferior) de cada c\u00edrculo es necesario usar para encontrar las intersecciones. Esta secci\u00f3n es necesaria puesto que la f\u00f3rmula que describe el c\u00edrculo contiene una ra\u00edz cuadrada que puede se positiva o negativa, generando dos segmentos en cada c\u00edrculo.<\/p>\n\n\n\n<p>Por ejemplo, partiendo de la f\u00f3rmula general de un c\u00edrculo con centro en [x<sub>1<\/sub>,y<sub>1<\/sub>] y radio r<sub>1<\/sub>:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (x-x_1)^2 + (y-y_1)^2 = r_1^2<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (y-y_1)^2 = r_1^2 - (x-x_1)^2<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\sqrt{(y-y_1)^2} = \\sqrt{r_1^2 - (x-x_1)^2}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = \\sqrt{r_1^2 - (x-x_1)^2} + y_1<\/span>\n\n\n\n<p>Con lo que se muestra la necesidad de identificar para cada c\u00edrculo el <strong><em>sector<\/em><\/strong> arriba y abajo que interviene para encontrar las intersecciones. El orden del sector se establece con las posibles combinaciones de:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>c\u00edrculo 2 abajo<\/th><th>c\u00edrculo2 arriba<\/th><\/tr><\/thead><tbody><tr><td><strong>c\u00edrculo 1 abajo<\/strong><\/td><td>[-1,-1]<\/td><td>[-1,1]<\/td><\/tr><tr><td><strong>c\u00edrculo 1 arriba<\/strong><\/td><td>[ 1,-1]<\/td><td>[ 1,1]<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El uso de cada combinaci\u00f3n se establece en el vector de 1 y 0 con el siguiente orden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sector = &#091; abajo1*abajo2,  abajo1*arriba2,\n          arriba1*abajo2, arriba1*arriba2]<\/code><\/pre>\n\n\n\n<p>las instrucciones en Python para lo descrito se muestran como una funci\u00f3n:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport numpy as np\nimport scipy.optimize as sp\ndef cruce2circulos(x1,y1,r1,x2,y2,r2):\n    ''' Revisa intervalo de area de cruce\n        entre dos c\u00edrculos de centro y radio\n        x1,y1,r1 \/\/ x2,y2,r2\n    '''\n    intersecta = &#x5B;]\n    dx = x2 - x1\n    dy = y2 - y1\n    d_centros = np.sqrt(dx**2 + dy**2)\n    d_cruce   = r2 + r1\n    \n    # los circulos se cruzan o tocan\n    if d_cruce &gt;= d_centros:\n\n        # intervalos de cruce\n        xa = np.max(&#x5B;x1-r1,x2-r2])\n        xb = np.min(&#x5B;x1+r1,x2+r2])\n        ya = np.max(&#x5B;y1-r1,y2-r2])\n        yb = np.min(&#x5B;y1+r1,y2+r1])\n        \n        # cada circulo arriba, abajo\n        abajo1 = 0 ; arriba1 = 0\n        abajo2 = 0 ; arriba2 = 0\n        if ya&lt;=y1:\n            abajo1  = 1\n        if yb&gt;=y1:\n            arriba1 = 1\n        if ya&lt;=y2:\n            abajo2  = 1\n        if yb&gt;=y2:\n            arriba2 = 1\n        sector  = &#x5B; abajo1*abajo2, abajo1*arriba2,\n                   arriba1*abajo2, arriba1*arriba2]\n        uncruce = &#x5B;xa,xb,ya,yb,sector]\n    return(uncruce)\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">El resultado para los c\u00edrculos del ejercicio son:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; x1=4; y1=4; r1=np.sqrt(5)\n&gt;&gt;&gt; x2=0; y2=0; r2=np.sqrt(16)\n&gt;&gt;&gt; uncruce = cruce2circulos(x1,y1,r1,x2,y2,r2)\n&gt;&gt;&gt; uncruce\n&#091;1.7639320225002102, 4.0, \n 1.7639320225002102, 2.23606797749979, \n&#091;0, 1, 0, 0]]\n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Ra\u00edces como coordenadas de intersecci\u00f3n entre dos c\u00edrculos<\/h3>\n\n\n\n<p>Las coordenadas de intersecci\u00f3n entre dos c\u00edrculos se obtienen aplicando un m\u00e9todo de b\u00fasqueda de ra\u00edces. Por ejemplo bisecci\u00f3n, que para esta parte se usa el algoritmo de SciPy con la instrucci\u00f3n sp.bisect(fx,xa,xb,xtol=2e-12).<\/p>\n\n\n\n<p>Para el caso m\u00e1s general, donde existen dos ra\u00edces que buscar, se divide el intervalo de b\u00fasqueda [xa,xb] en dos medios segmentos [xa,xc] y [xc,xb]. Se aplica un m\u00e9todo de b\u00fasqueda de ra\u00edces para cada subintervalo. Para minimizar errores de truncamiento, en cada b\u00fasqueda de desplaza dx\/10 cada xc hacia el lado que amplia el subintervalo de b\u00fasqueda.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"426\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2018\/09\/intersectaCirculos01.png\" alt=\"intersecta C\u00edrculos\" class=\"wp-image-17677\" \/><\/figure>\n\n\n\n<p>Para el caso donde los c\u00edrculos solo tienen un punto de contacto, se realiza una revisi\u00f3n considerando que el intervalo de b\u00fasqueda podr\u00eda ser menor al valor de tolerancia del radio.<\/p>\n\n\n\n<p>Por ejemplo, cuando la linea que une los centros de los c\u00edrculos resulta paralelos al eje de las x,&nbsp; adicionalmente se topan en un solo punto, el algoritmo anterior indica que se usan todos los sectores de los c\u00edrculos, dando como resultado cuatro ra\u00edces iguales. El caso se corrige realizando la parte de sectores solo cuando la distancia entre [xa,xb] es mayor a cero.<\/p>\n\n\n\n<p>El resultado se presenta como los vectores raizx y raizy.<\/p>\n\n\n\n<p>Las instrucciones en Python para esta secci\u00f3n se describen a continuaci\u00f3n:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef raices2circulos(x1,y1,r1,x2,y2,r2,tolera=2e-12):\n    ''' busca las intersecci\u00f3n entre 2 circulos\n        de centro y radio: x1,y1,r1 || x2,y2,r2\n        revisa con cruce2circulos()\n    '''\n    uncruce = cruce2circulos(x1,y1,r1,x2,y2,r2)\n    raizx = &#x5B;]; raizy = &#x5B;]\n\n    # si hay cruce de circulos\n    if len(uncruce)&gt;0:\n        sectores = &#x5B;&#x5B;-1,-1],&#x5B;-1,1], \n                    &#x5B; 1,-1],&#x5B; 1,1]]\n        &#x5B;xa,xb,ya,yb,sector] = uncruce\n        xc = (xa+xb)\/2\n        dx = np.abs(xb-xa)\n        dy = np.abs(yb-ya)\n        k = 1    # se tocan en un punto\n        if dx&gt;0: # se tocan en mas de un punto\n            k = len(sector)\n        for j in range(0,k,1):\n            if sector&#x5B;j]==1:\n                s1 = sectores&#x5B;j]&#x5B;0]\n                s2 = sectores&#x5B;j]&#x5B;1]\n                fx1 = lambda x: s1*np.sqrt(r1**2-(x-x1)**2)+y1\n                fx2 = lambda x: s2*np.sqrt(r2**2-(x-x2)**2)+y2\n                fx  = lambda x: fx1(x)-fx2(x)\n                fa = fx(xa)\n                fb = fx(xb)\n                raiz1 = np.nan\n                raiz2 = np.nan\n                \n                # intervalo\/2 izquierda\n                xc = xc + dx\/10\n                fc = fx(xc)\n                cambio = np.sign(fa)*np.sign(fc)\n                if cambio&lt;0:\n                    raiz1 = sp.bisect(fx,xa,xc,xtol=tolera)\n                    \n                # intervalo\/2 derecha\n                xc = xc - 2*dx\/10\n                fc = fx(xc)\n                cambio = np.sign(fc)*np.sign(fb)\n                if cambio&lt;0:\n                    raiz2 = sp.bisect(fx,xc,xb,xtol=tolera)\n                    \n                # si hay contacto en un borde\n                if dx&lt;tolera*r1 and dy&gt;0:\n                    raiz1 = xa\n                if dy&lt;tolera*r1 and dx&gt;0:\n                    raiz1 = x1\n                    \n                # A\u00f1ade si existe raiz\n                if not(np.isnan(raiz1)):\n                    raizx.append(raiz1)\n                    raizy.append(fx1(raiz1))\n                if not(np.isnan(raiz2)):\n                    raizx.append(raiz2)\n                    raizy.append(fx1(raiz2))\n        raices = &#x5B;raizx,raizy]\n    return(raices)\n<\/pre><\/div>\n\n\n<p>El resultado del algoritmo para el ejercicio es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; raices = raices2circulos(x1,y1,r1,x2,y2,r2,tolera=2e-12)\n&gt;&gt;&gt; raices\n&#091;&#091;1.805829001269906, 3.569170998730207],\n &#091;3.569170998734088, 1.8058290012706681]]\n&gt;&gt;&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 3Eva2018TI_T1 Intersecci\u00f3n de dos c\u00edrculos Para la soluci\u00f3n se presentan dos secciones: 1. Soluci\u00f3n particular de intersecci\u00f3n de c\u00edrculos 2. Soluci\u00f3n General de intersecci\u00f3n de c\u00edrculos _ 1. Soluci\u00f3n Particular de intersecci\u00f3n de c\u00edrculos La soluci\u00f3n particular se enfoca en el enunciado del ejercicio presentado Literal a Se realiza la gr\u00e1fica las funciones usando [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-ejemplo","format":"standard","meta":{"footnotes":""},"categories":[51],"tags":[58,54],"class_list":["post-2427","post","type-post","status-publish","format-standard","hentry","category-mn-s3eva20","tag-ejemplos-python","tag-mnumericos"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2427","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=2427"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2427\/revisions"}],"predecessor-version":[{"id":23931,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2427\/revisions\/23931"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=2427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=2427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=2427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}