{"id":11358,"date":"2015-08-06T16:05:38","date_gmt":"2015-08-06T21:05:38","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/ccpg1001\/?p=11358"},"modified":"2026-04-04T11:53:38","modified_gmt":"2026-04-04T16:53:38","slug":"movimiento-circular-particula","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/fm-unidades\/movimiento-circular-particula\/","title":{"rendered":"9.5 Movimiento circular - Una part\u00edcula"},"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>Movimiento: <\/p>\n\n\n\n<p><a href=\"#movcircular\">Circular<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoparticula\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#velocidad\">Velocidad<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmovelocidad\">Algoritmo<\/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=\"movcircular\">1. movimiento circular - part\u00edcula<\/h2>\n\n\n\n<p>Simular el movimiento circular de una part\u00edcula en el plano x,y considerando la variable tiempo consiste en definir las ecuaciones a usar para cada eje.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/08\/movimientocircular01_GIFanimado.gif\" alt=\"movimiento circular gif animado\" class=\"wp-image-16230\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\cos \\Big( \\dfrac{2 \\pi}{T}t \\Big) <\/span><\/p>\n\n\n\n<p class=\"has-text-align-center\"><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = \\sin \\Big( \\dfrac{2 \\pi}{T}t \\Big) <\/span><\/p>\n\n\n\n<p>donde T es el periodo de la funci\u00f3n.<\/p>\n\n\n\n<p>Para la gr\u00e1fica se crean todas las muestras de los puntos en los tiempos ti que al realizar la gr\u00e1fica mostrar\u00eda un punto en cada posici\u00f3n ti. La animaci\u00f3n consiste en usar el concepto de fotograma, una \"foto\" por unidad de tiempo como en el cine, es decir solo dibujar un punto a la vez, por cada foto 'i'.<\/p>\n\n\n\n<p>Los fotogramas dentro de un periodo se definen como fotos=20, y el retardo dt en milisegundos dentro del periodo es t\/fotos*1000.<\/p>\n\n\n\n<p>La animaci\u00f3n requiere usar los procedimientos <code>redibuja(i)<\/code> y <code>borrapizarra()<\/code> para cada fotograma 'i'. Los procedimientos usados o coordinados con la instrucci\u00f3n <code>animation.FuncAnimation()<\/code><\/p>\n\n\n\n<p>En caso de requerir un archivo gif animado se proporciona un nombre de archivo. Para crear el archivo se requiere de la libreria 'pillow'&nbsp;a ser instalado.<\/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>Movimiento: <\/p>\n\n\n\n<p><a href=\"#movcircular\">Circular<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoparticula\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#velocidad\">Velocidad<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmovelocidad\">Algoritmo<\/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=\"algoritmoparticula\">2. Algoritmo en Python - part\u00edcula<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# FCNM-ESPOL-2015. Fisica con Python\n# Una particula en recorrido circular\n# propuesta: edelros@espol.edu.ec\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.animation as animation\n\n# INGRESO\nT = 4 # periodo en segundos\nx_t = lambda t: np.cos(2*np.pi*t\/T)\ny_t = lambda t: np.sin(2*np.pi*t\/T)\n\n# intervalos ejes x,y \nx_a = -1.2 ; x_b =-x_a  # sim\u00e9tricos a 0\ny_a = -1.2 ; y_b =-y_a\n\nfotos  = 20   # muestras en un periodo\nretardo = int(T\/fotos*1000)  # milisegundos entre fotogramas\n\nnarchivo = 'movimientocircular01' # archivo.gif\n\n# PROCEDIMIENTO\n# Inicializa valores de muestras\ni  = np.arange(0, fotos) # cuenta tramas\nti = np.linspace(0,T,fotos+1)\nxi = x_t(ti)\nyi = y_t(ti)\n\n# SALIDA - Gr\u00e1fica animada\nfigura, graf_xy = plt.subplots()\ngraf_xy.axis(&#x5B;x_a, x_b, y_a, y_b])\ngraf_xy.set_aspect('equal')\ngraf_xy.grid()\ngraf_xy.set_xlabel('x(t)')\ngraf_xy.set_ylabel('y(t)')\ngraf_xy.set_title('movimiento circular')\npunto, = graf_xy.plot(xi&#x5B;0], yi&#x5B;0],'ro')\n\n# cuadros de texto en gr\u00e1fico\ntxt_x = (x_b+x_a)\/2\ntxt_y = y_b*(1-0.09)\ntxt_ti = graf_xy.text(txt_x,txt_y,'t='+str(ti&#x5B;0]),\n                      horizontalalignment='center')\n\n# Animaci\u00f3n Nueva graf_xy (n frame)\ndef redibuja(i):\n    # actualiza el punto, &#x5B;] porque es solo un valor\n    punto.set_xdata(&#x5B;xi&#x5B;i]]) \n    punto.set_ydata(&#x5B;yi&#x5B;i]])\n    # actualiza texto\n    t_trama = np.around(ti&#x5B;i],2)\n    txt_ti.set_text('t= '+str(t_trama))\n    return (punto,txt_ti)\n\ndef borrapizarra(): # limpiar gr\u00e1fica\n    punto.set_ydata(np.ma.array(xi, mask=True))\n    txt_ti.set_text('')\n    return (punto,txt_ti)\n\n# Animaci\u00f3n coordina\nani = animation.FuncAnimation(figura, redibuja, i ,\n                              init_func=borrapizarra,\n                              interval = retardo, blit=True)\n# Graba Archivo GIFAnimado y video, requiere 'pillow'\nani.save(narchivo+'_GIFanimado.gif',writer='pillow')\n\nplt.show()\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Otros ejercicios donde las animaciones son un complemento para mostrar resultados en otros cursos:<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u02\/metodo-biseccion\/\" data-type=\"post\" data-id=\"184\">M\u00e9todo de la Bisecci\u00f3n \u2013 Concepto<\/a> - M\u00e9todos Num\u00e9ricos<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u07\/edp-parabolicas\/\" data-type=\"post\" data-id=\"2041\">Ecuaciones Diferenciales Parciales Parab\u00f3licas<\/a> - M\u00e9todos Num\u00e9ricos<\/p>\n\n\n\n<p>Gr\u00e1fica animada para interpretar el Integral de convoluci\u00f3n - Se\u00f1ales y Sistemas<\/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>Movimiento: <\/p>\n\n\n\n<p><a href=\"#movcircular\">Circular<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoparticula\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#velocidad\">Velocidad<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmovelocidad\">Algoritmo<\/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=\"velocidad\">3. Movimiento circular velocidad(t)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"grafica-y-animacion\">Gr\u00e1fica y animaci\u00f3n<\/h3>\n\n\n\n<p>Se a\u00f1aden los componentes de velocidad por cada eje al algoritmo de movimiento circular de una part\u00edcula para obtener el resultado siguiente<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/pynotes101.wordpress.com\/wp-content\/uploads\/2025\/11\/movimientocircular02_gifanimado.gif\" alt=\"movimiento circular 02 GIF animado\" class=\"wp-image-17107\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> v_x(t) = \\dfrac{\\delta}{\\delta t} x(t) = -\\dfrac{2\\pi}{T}\\sin \\Big( \\frac{2 \\pi}{T}t \\Big) <\/span><\/p>\n\n\n\n<p class=\"has-text-align-center\"><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> v_y(t) = \\dfrac{\\delta}{\\delta t}y(t) = \\dfrac{2\\pi}{T}\\cos\\Big( \\dfrac{2 \\pi}{T}t \\Big) <\/span><\/p>\n\n\n\n<p>donde T es el periodo de la funci\u00f3n.<\/p>\n\n\n\n<p>Los vectores de velocidad son l\u00edneas que parten desde la posici\u00f3n de la part\u00edcula y se extienden en magnitud de cada componente de la velocidad<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vx, = graf_xy.plot(&#091;xi&#091;0],xi&#091;0]+vxi&#091;0]],\n                   &#091;yi&#091;0],yi&#091;0]],'*-.')\nvy, = graf_xy.plot(&#091;xi&#091;0],xi&#091;0]],\n                   &#091;yi&#091;0],yi&#091;0]+vyi&#091;0]],'*-.')<\/code><\/pre>\n\n\n\n<p>en cada procedimiento <code>redibuja(i)<\/code> y <code>borrapizarra()<\/code> se incorpora el nuevo componente para actualizar las coordenadas y en la salida <code>return()<\/code>.<\/p>\n\n\n\n<p>Al incorporar los vectores de velocidad, se debe extender los intervalos de cada eje, con un exceso de 0.2 como espacio para mostrar el cuadro de texto para la variable tiempo.<\/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>Movimiento: <\/p>\n\n\n\n<p><a href=\"#movcircular\">Circular<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoparticula\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#velocidad\">Velocidad<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmovelocidad\">Algoritmo<\/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=\"algoritmovelocidad\">4. Algoritmo en Python - velocidad<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# FCNM-ESPOL-2015. Fisica con Python\n# velocidad de una particula en recorrido circular\n# propuesta: edelros@espol.edu.ec\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.animation as animation\n\n# INGRESO\nT = 4 # periodo en segundos\nx_t = lambda t: np.cos(2*np.pi*t\/T)\ny_t = lambda t: np.sin(2*np.pi*t\/T)\n# velocidades\nv_x = lambda t: -(2*np.pi\/T)*np.sin(2*np.pi*t\/T)\nv_y = lambda t: (2*np.pi\/T)*np.cos(2*np.pi*t\/T)\n\n# intervalos ejes x,y \nx_a = -1.8-.2 ; x_b =-x_a  # sim\u00e9tricos a 0\ny_a = -1.8-.2 ; y_b =-y_a\n\nfotos  = 40   # muestras en un periodo\nretardo = int(T\/fotos*1000)  # milisegundos entre fotogramas\n\nnarchivo = 'movimientocircular02' # archivo.gif\n\n# PROCEDIMIENTO\n# Inicializa valores de muestras\ni  = np.arange(0, fotos) # cuenta tramas\nti = np.linspace(0,T,fotos+1)\nxi = x_t(ti)\nyi = y_t(ti)\nvxi = v_x(ti)\nvyi = v_y(ti)\n\n# SALIDA - Gr\u00e1fica animada\nfigura, graf_xy = plt.subplots()\ngraf_xy.axis(&#x5B;x_a, x_b, y_a, y_b])\ngraf_xy.set_aspect('equal')\ngraf_xy.grid()\ngraf_xy.set_xlabel('x(t)')\ngraf_xy.set_ylabel('y(t)')\ngraf_xy.set_title('movimiento circular')\npunto, = graf_xy.plot(xi&#x5B;0], yi&#x5B;0],'ro')\n# dibuja velocidad\nvelocidad, = graf_xy.plot(&#x5B;xi&#x5B;0],xi&#x5B;0]+vxi&#x5B;0]],\n                          &#x5B;yi&#x5B;0],yi&#x5B;0]+vyi&#x5B;0]],'*-')\nvx, = graf_xy.plot(&#x5B;xi&#x5B;0],xi&#x5B;0]+vxi&#x5B;0]],\n                   &#x5B;yi&#x5B;0],yi&#x5B;0]],'*-.')\nvy, = graf_xy.plot(&#x5B;xi&#x5B;0],xi&#x5B;0]],\n                   &#x5B;yi&#x5B;0],yi&#x5B;0]+vyi&#x5B;0]],'*-.')\n\n# Dibuja trayectoria circular\ntrayecto = graf_xy.plot(xi,yi,linestyle='dotted')\n\n\n# cuadros de texto en gr\u00e1fico\ntxt_x = (x_b+x_a)\/2\ntxt_y = y_b*(1-0.09)\ntxt_ti = graf_xy.text(txt_x,txt_y,'t='+str(ti&#x5B;0]),\n                      horizontalalignment='left')\n\n# Animaci\u00f3n Nueva graf_xy (n frame)\ndef redibuja(i):\n    # actualiza el punto\n    punto.set_xdata(xi&#x5B;i]) \n    punto.set_ydata(yi&#x5B;i])\n    # actualiza velocidad\n    velocidad.set_xdata(&#x5B;xi&#x5B;i],xi&#x5B;i]+vxi&#x5B;i]])\n    velocidad.set_ydata(&#x5B;yi&#x5B;i],yi&#x5B;i]+vyi&#x5B;i]])\n    vx.set_xdata(&#x5B;xi&#x5B;i],xi&#x5B;i]+vxi&#x5B;i]])\n    vx.set_ydata(&#x5B;yi&#x5B;i],yi&#x5B;i]])\n    vy.set_xdata(&#x5B;xi&#x5B;i],xi&#x5B;i]])\n    vy.set_ydata(&#x5B;yi&#x5B;i],yi&#x5B;i]+vyi&#x5B;i]])\n\n    # actualiza texto\n    t_trama = np.around(ti&#x5B;i],2)\n    txt_ti.set_text('t= '+str(t_trama))\n    return (punto,txt_ti,velocidad,vx,vy)\n\ndef borrapizarra(): # limpiar gr\u00e1fica\n    punto.set_ydata(np.ma.array(xi, mask=True))\n    velocidad.set_ydata(np.ma.array(xi, mask=True))\n    vx.set_ydata(np.ma.array(xi, mask=True))\n    vy.set_ydata(np.ma.array(xi, mask=True))\n    txt_ti.set_text('')\n    return (punto,txt_ti,velocidad,vx,vy)\n\n# Animaci\u00f3n coordina\nani = animation.FuncAnimation(figura, redibuja, i ,\n                              init_func=borrapizarra,\n                              interval = retardo, blit=True)\n# Graba Archivo GIFAnimado y video, requiere 'imagemagick'\nani.save(narchivo+'_GIFanimado.gif',writer='pillow')\n\nplt.show()\n\n<\/pre><\/div>\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>Movimiento: <\/p>\n\n\n\n<p><a href=\"#movcircular\">Circular<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoparticula\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#velocidad\">Velocidad<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmovelocidad\">Algoritmo<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Movimiento: Circular Algoritmo Velocidad Algoritmo 1. movimiento circular - part\u00edcula Simular el movimiento circular de una part\u00edcula en el plano x,y considerando la variable tiempo consiste en definir las ecuaciones a usar para cada eje. donde T es el periodo de la funci\u00f3n. Para la gr\u00e1fica se crean todas las muestras de los puntos en [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-fp-unidades","format":"standard","meta":{"footnotes":""},"categories":[110],"tags":[],"class_list":["post-11358","post","type-post","status-publish","format-standard","hentry","category-fm-unidades"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/11358","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=11358"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/11358\/revisions"}],"predecessor-version":[{"id":20723,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/11358\/revisions\/20723"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=11358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=11358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=11358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}