{"id":23082,"date":"2026-03-04T08:49:33","date_gmt":"2026-03-04T13:49:33","guid":{"rendered":"https:\/\/blog.espol.edu.ec\/algoritmos101\/?p=23082"},"modified":"2026-04-15T20:37:50","modified_gmt":"2026-04-16T01:37:50","slug":"funciones-vectoriales-curvas-3d","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/cv-unidades\/funciones-vectoriales-curvas-3d\/","title":{"rendered":"1.3 Funciones vectoriales y Curvas en 3D con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#helice\">H\u00e9lice<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#elipse\">Elipse<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"helice\">1. Ejemplo - H\u00e9lice en 3D<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Stewart 13.1 Ejemplo 4 p848<\/p>\n\n\n\n<p>Trace la curva cuya ecuaci\u00f3n vectorial es<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> r(t) = cos(t) \\mathbf{i} + sen(t)\\mathbf{j} +t \\mathbf{k} <\/span>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"458\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2026\/03\/FuncionesVectoriales_graf01_helice.png\" alt=\"Funciones Vectoriales h\u00e9lice gr\u00e1fica 01\" class=\"wp-image-23140\" style=\"width:350px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Desarrollo anal\u00edtico - paso a paso<\/h3>\n\n\n\n<p>Se puede expresar las ecuaciones param\u00e9tricas de la curva para cada eje<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = cos(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = sen(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z(t) = t <\/span>\n\n\n\n<p>Se define el intervalo t entre [0,10] para 41 muestras. <\/p>\n\n\n\n<p>Se aumenta el n\u00famero de muestras para hacer la curva mas suave.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#helice\">H\u00e9lice<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#elipse\">Elipse<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"algoritmo\">1.2 Algoritmo en Python<\/h3>\n\n\n\n<p>Para cada eje se escribe una ecuaci\u00f3n, que se puede integrar como una sola dependiente de la variable t que entrega un arreglo con los valores resultantes para cada eje,<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n# INGRESO\nfx = lambda t: np.cos(t)\nfy = lambda t: np.sin(t)\nfz = lambda t: t\nrt = lambda t: np.array(&#x5B;fx(t),fy(t),fz(t)],\n                        dtype=float)\n<\/pre><\/div>\n\n\n<p>Como al final se obtiene un arreglo, se debe mantener la funci\u00f3n respecto a <strong>t<\/strong>. En caso que una de las funciones sean cero, se escribe 0*t, para que el resultado contin\u00fae siendo un arreglo y sea posible realizar la gr\u00e1fica.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ejemplo: fx = lambda t: 0*t en caso que sea nula<\/code><\/pre>\n\n\n\n<p>Para la observaci\u00f3n se a\u00f1ade el intervalo para la variable t, [a,b] y la cantidad de muestras a observar, de forma semejante a lo realizado para las gr\u00e1ficas en 2D.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Ejercicio Stewart 13.1 p848\n# Funciones vectoriales y Curvas en 3D\nimport numpy as np\n\n# INGRESO\nfx = lambda t: np.cos(t) # 0*t en caso que sea nula\nfy = lambda t: np.sin(t)\nfz = lambda t: t\n# funci\u00f3n vectorial\nrt = lambda t: np.array(&#x5B;fx(t),fy(t),fz(t)],\n                        dtype=float)\na = 0 # intervalo t entre &#x5B;a,b]\nb = 10\nmuestras = 7\ntitulo = 'Funciones vectoriales - H\u00e9lice'\nverdecimales = 4\n\n# PROCEDIMIENTO\nti = np.linspace(a,b,muestras)\nri = rt(ti)\n\n# SALIDA\nnp.set_printoptions(verdecimales)\nprint(titulo)\nprint('i, ti, &#x5B;xi, yi, zi]')\nfor i in range(0,muestras,1):\n    print(i, np.around(ti&#x5B;i],verdecimales),\n          ri&#x5B;:,i])\n\n# GRAFICA ---------------------\nimport matplotlib.pyplot as plt\n\n# suavizar la curva\nmuestras_graf = 6*muestras\n \ntk = np.linspace(a,b,muestras_graf)\nrk = rt(tk)\ndt = tk&#x5B;1]-tk&#x5B;0]\n\nn = muestras-1 # \u00faltimo punto\n\nfig3D = plt.figure()\ngraf3D = fig3D.add_subplot(projection='3d')\n\ngraf3D.plot(rk&#x5B;0],rk&#x5B;1],rk&#x5B;2],label='r(t)')\ngraf3D.scatter(ri&#x5B;0],ri&#x5B;1],ri&#x5B;2],\n               marker='o',color ='orange',\n               label='&#x5B;x,y,z]')\n\n# etiquetas\nfor i in range(0,muestras,1):\n    if muestras&lt;=10: # etiquetas de tiempo\n        etiqueta = 't='+str(np.round(ti&#x5B;i],verdecimales))\n        graf3D.text(ri&#x5B;0,i],ri&#x5B;1,i],ri&#x5B;2,i],etiqueta)\n\n# entorno gr\u00e1fico\ngraf3D.set_title(titulo)\ngraf3D.set_xlabel('x')\ngraf3D.set_ylabel('y')\ngraf3D.set_zlabel('z')\ngraf3D.legend()\nplt.tight_layout()\nplt.show()\n<\/pre><\/div>\n\n\n<p>obteniendo como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Funciones vectoriales - H\u00e9lice\ni, ti, &#091;xi, yi, zi]\n0 0.0 &#091;1. 0. 0.]\n1 0.25 &#091;0.9689 0.2474 0.25  ]\n2 0.5 &#091;0.8776 0.4794 0.5   ]\n3 0.75 &#091;0.7317 0.6816 0.75  ]\n4 1.0 &#091;0.5403 0.8415 1.    ]\n5 1.25 &#091;0.3153 0.949  1.25  ]\n...<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#helice\">H\u00e9lice<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#elipse\">Elipse<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"grafica\">1.2 Gr\u00e1fica con Python<\/h3>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"458\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2026\/03\/FuncionesVectoriales_graf01_helice.png\" alt=\"Funciones Vectoriales h\u00e9lice gr\u00e1fica 01\" class=\"wp-image-23140\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA ---------------------\nimport matplotlib.pyplot as plt\n\n# suavizar la curva\nmuestras_graf = 6*muestras\n \ntk = np.linspace(a,b,muestras_graf)\nrk = rt(tk)\ndt = tk&#x5B;1]-tk&#x5B;0]\n\nn = muestras-1 # \u00faltimo punto\n\nfig3D = plt.figure()\ngraf3D = fig3D.add_subplot(projection='3d')\n\ngraf3D.plot(rk&#x5B;0],rk&#x5B;1],rk&#x5B;2],label='r(t)')\ngraf3D.scatter(ri&#x5B;0],ri&#x5B;1],ri&#x5B;2],\n               marker='o',color ='orange',\n               label='&#x5B;x,y,z]')\n\n# etiquetas\nfor i in range(0,muestras,1):\n    if muestras&lt;=10: # etiquetas de tiempo\n        etiqueta = 't='+str(np.round(ti&#x5B;i],verdecimales))\n        graf3D.text(ri&#x5B;0,i],ri&#x5B;1,i],ri&#x5B;2,i],etiqueta)\n\n# entorno gr\u00e1fico\ngraf3D.set_title(titulo)\ngraf3D.set_xlabel('x')\ngraf3D.set_ylabel('y')\ngraf3D.set_zlabel('z')\ngraf3D.legend()\nplt.tight_layout()\nplt.show()\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=\"elipse\">2. Ejemplo - Elipse en 3D<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Stewart 13.1 Ejemplo 5 p850<\/p>\n\n\n\n<p>Determine una funci\u00f3n vectorial que represente la curva de intersecci\u00f3n del cilindro<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x^2 + y^2 =1 <\/span>\n\n\n\n<p>y el plano: y+z=2<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Desarrollo anal\u00edtico - paso a paso<\/h3>\n\n\n\n<p>La proyecci\u00f3n en el plano xy es el c\u00edrculo, por lo que se escribe en funci\u00f3n de t:<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = cos(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = sen(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0 \\leq t \\leq 2\\pi <\/span>\n\n\n\n<p>de la ecuaci\u00f3n del plano se tiene: z = 2-y, por lo que se tiene:<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = cos(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = sen(t) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z(t) = 2 - sen(t) <\/span>\n\n\n\n<p>con la ecuaci\u00f3n de la curva<\/p>\n\n\n\n<p><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = cos(t) \\mathbf{i} + sen(t) \\mathbf{j} + (2 - sen(t)) \\mathbf{k} <\/span><br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Algoritmo en Python<\/h3>\n\n\n\n<p>Siguiendo el ejemplo anterior, se modifica en el algoritmo el bloque de ingreso:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# INGRESO\nfx = lambda t: np.cos(t)\nfy = lambda t: np.sin(t)\nfz = lambda t: 2-np.sin(t)\nrt = lambda t: np.array(&#x5B;fx(t),fy(t),fz(t)]\n                        ,dtype=float)\na = 0 # intervalo t entre &#x5B;a,b]\nb = 2*np.pi\nmuestras = 7\ntitulo = 'Funciones vectoriales - Elipse'\nverdecimales = 4\n<\/pre><\/div>\n\n\n<p>con los siguientes resultados:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Funciones vectoriales - Elipse\ni, ti, &#091;xi, yi, zi]\n0 0.0 &#091;1. 0. 2.]\n1 0.1571 &#091;0.9877 0.1564 1.8436]\n2 0.3142 &#091;0.9511 0.309  1.691 ]\n3 0.4712 &#091;0.891 0.454 1.546]\n4 0.6283 &#091;0.809  0.5878 1.4122]\n5 0.7854 &#091;0.7071 0.7071 1.2929]\n...<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"442\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2026\/03\/FuncionesVectoriales_graf01_elipse.png\" alt=\"Funciones Vectoriales Elipse gr\u00e1fico 01\" class=\"wp-image-23142\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#helice\">H\u00e9lice<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#elipse\">Elipse<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e9lice algoritmo gr\u00e1fica Elipse 1. Ejemplo - H\u00e9lice en 3D Referencia: Stewart 13.1 Ejemplo 4 p848 Trace la curva cuya ecuaci\u00f3n vectorial es 1.1 Desarrollo anal\u00edtico - paso a paso Se puede expresar las ecuaciones param\u00e9tricas de la curva para cada eje Se define el intervalo t entre [0,10] para 41 muestras. Se aumenta el [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"wp-custom-template-entrada-fp-unidades","format":"standard","meta":{"footnotes":""},"categories":[238],"tags":[],"class_list":["post-23082","post","type-post","status-publish","format-standard","hentry","category-cv-unidades"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/23082","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=23082"}],"version-history":[{"count":29,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/23082\/revisions"}],"predecessor-version":[{"id":24286,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/23082\/revisions\/24286"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=23082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=23082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=23082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}