Fișier:Tautochrone_curve.gif
From Wikipedia, the free encyclopedia
Tautochrone_curve.gif (300 × 200 pixeli, mărime fișier: 102 KB, tip MIME: image/gif, în buclă, 80 imagini, 3,2 s)
Acest fișier se află la Wikimedia Commons. Consultați pagina sa descriptivă acolo. |
Descriere fișier
DescriereTautochrone curve.gif |
A tautochrone curve is the curve for which the time taken by an object sliding without friction in uniform gravity to its lowest point is independent of its starting point. Here, four points at different positions reach the bottom at the same time. In the graphic, s represents arc length, t represents time, and the blue arrows represent acceleration along the trajectory. As the points reach the horizontal, the velocity becomes constant, the arc length being linear to time. |
Dată | 9 mai 2007; new version august 2009 |
Sursă | Operă proprie |
Autor |
Claudio Rocchini |
GIF dezvoltare InfoField | Această GIF grafică digitală a fost creată cu Matplotlib |
Cod sursă InfoField | Python code#!/usr/bin/python
# -*- coding: utf8 -*-
'''
animation of balls on a tautochrone curve
'''
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib import animation
from math import *
# settings
fname = 'Tautochrone curve'
width, height = 300, 200
nframes = 80
fps=25
balls = [
{'a':1.0, 'color':'#0000c0'},
{'a':0.8, 'color':'#c00000'},
{'a':0.6, 'color':'#00c000'},
{'a':0.4, 'color':'#c0c000'}]
def curve(phi):
x = phi + sin(phi)
y = 1.0 - cos(phi)
return np.array([x, y])
def animate(nframe, empty=False):
t = nframe / float(nframes - 1.)
# prepare a clean and image-filling canvas for each frame
fig = plt.gcf()
fig.clf()
ax_canvas = plt.gca()
ax_canvas.set_position((0, 0, 1, 1))
ax_canvas.set_xlim(0, width)
ax_canvas.set_ylim(0, height)
ax_canvas.axis('off')
# draw the ramp
x0, y0 = 293, 8
h = 182
npoints = 200
points = []
for i in range(npoints):
phi = i / (npoints - 1.0) * pi - pi
x, y = h/2. * curve(phi) + np.array([x0, y0])
points.append([x, y])
rampline = patches.Polygon(points, closed=False, facecolor='none',
edgecolor='black', linewidth=1.5, capstyle='butt')
points += [[x0-h*pi/2, y0], [x0-h*pi/2, y0+h]]
ramp = patches.Polygon(points, closed=True, facecolor='#c0c0c0', edgecolor='none')
# plot axes
plotw = 0.5
ax_plot = fig.add_axes((0.47, 0.46, plotw, plotw*2/pi*width/height))
ax_plot.set_xlim(0, 1)
ax_plot.set_ylim(0, 1)
for b in balls:
time_array = np.linspace(0, 1, 201)
phi_pendulum_array = (1 - b['a'] * np.cos(time_array*pi/2))
ax_plot.plot(time_array, phi_pendulum_array, '-', color=b['color'], lw=.8)
ax_plot.set_xticks([])
ax_plot.set_yticks([])
ax_plot.set_xlabel('t')
ax_plot.set_ylabel('s')
ax_canvas.add_patch(ramp)
ax_canvas.add_patch(rampline)
for b in balls:
# draw the balls
phi_pendulum = b['a'] * -cos(t * pi/2)
phi_wheel = 2 * asin(phi_pendulum)
phi_wheel = -abs(phi_wheel)
x, y = h/2. * curve(phi_wheel) + np.array([x0, y0])
ax_canvas.add_patch(patches.Circle((x, y), radius=6., zorder=3,
facecolor=b['color'], edgecolor='black'))
ax_plot.plot([t], [1 + phi_pendulum], '.', ms=6., mec='none', mfc='black')
v = h/2. * np.array([1 + cos(phi_wheel), sin(phi_wheel)])
vnorm = v / hypot(v[0], v[1])
# in the harmonic motion, acceleration is proportional to -position
acc_along_line = 38. * -phi_pendulum * vnorm
ax_canvas.arrow(x, y, acc_along_line[0], acc_along_line[1],
head_width=6, head_length=6, fc='#1b00ff', ec='#1b00ff')
fig = plt.figure(figsize=(width/100., height/100.))
print 'saving', fname + '.gif'
#anim = animation.FuncAnimation(fig, animate, frames=nframes)
#anim.save(fname + '.gif', writer='imagemagick', fps=fps)
frames = []
for nframe in range(nframes):
frame = fname + '_{:02}.png'.format(nframe)
animation.FuncAnimation(fig, lambda n: animate(nframe), frames=1).save(
frame, writer='imagemagick')
frames.append(frame)
# assemble animation using imagemagick, this avoids dithering and huge filesize
os.system('convert -delay {} +dither +remap -layers Optimize {} "{}"'.format(
100//fps, ' '.join(['"' + f + '"' for f in frames]), fname + '.gif'))
for frame in frames:
if os.path.exists(frame):
os.remove(frame)
|
Licențiere
Eu, deținătorul drepturilor de autor ale acestei opere, prin prezenta îmi public lucrarea sub următoarele licențe:
Se permite copierea, distribuirea și/sau modificarea acestui document conform termenilor Documentației de licență liberă GNU, versiunea 1.2 sau orice altă versiune ulterioară publicată de Free Software Foundation, fără părți neschimbabile, texte de pe copertele principale și finale. O copie a acestei licențe este inclusă în secțiunea numită Documentația de licență liberă GNU.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
Acest fișier a fost eliberat sub licența Creative Commons Atribuire și distribuire în condiții identice 3.0 Neadaptată. | ||
| ||
Această licență a fost atașată fișierului ca parte a actualizării licențierilor GFDL.http://creativecommons.org/licenses/by-sa/3.0/CC BY-SA 3.0Creative Commons Attribution-Share Alike 3.0truetrue |
Acest fișier a fost eliberat sub licența Creative Commons Atribuire 2.5 Generică.
- Sunteți liber:
- să partajați cu alții – aveți dreptul de a copia, distribui și transmite opera
- să adaptați – aveți dreptul de a adapta opera
- În următoarele condiții:
- atribuind – Trebuie să atribuiți opera corespunzător, introducând o legătură către licență și indicând dacă ați făcut schimbări. Puteți face asta prin orice metodă rezonabilă, dar nu într-un fel care ar sugera faptul că persoana ce a licențiat conținutul v-ar susține sau ar aproba folosirea de către dumneavoastră a operei sale.
Puteți alege licența pe care o doriți.
Items portrayed in this file
subiectul reprezentat
source of file engleză
original creation by uploader engleză
9 mai 2007
image/gif
Istoricul fișierului
Apăsați pe Data și ora pentru a vedea versiunea trimisă atunci.
Data și ora | Miniatură | Dimensiuni | Utilizator | Comentariu | |
---|---|---|---|---|---|
actuală | 1 august 2009 16:15 | 300x200 (102 KB) | Geek3 | new physically correct version | |
9 mai 2007 09:56 | 300x200 (602 KB) | Rocchini | {{Information |Description=Tautochrone curve animation (4 points runs over a cycloid) |Source=Own work |Date=2007-05-09 |Author=Claudio Rocchini |Permission=CC-BY 2.5 }} |
Utilizarea fișierului
Următoarele pagini conțin această imagine:
Utilizarea globală a fișierului
Următoarele alte proiecte wiki folosesc acest fișier:
- Utilizare la ar.wikipedia.org
- Utilizare la bn.wikipedia.org
- Utilizare la ca.wikipedia.org
- Utilizare la da.wikipedia.org
- Utilizare la de.wikipedia.org
- Utilizare la de.wikiversity.org
- Utilizare la en.wikipedia.org
- Utilizare la es.wikipedia.org
- Utilizare la fa.wikipedia.org
- Utilizare la fr.wikipedia.org
- Utilizare la fr.wikibooks.org
- Utilizare la fr.wiktionary.org
- Utilizare la he.wikipedia.org
- Utilizare la hr.wikipedia.org
- Utilizare la id.wikipedia.org
- Utilizare la it.wikipedia.org
- Utilizare la ja.wikipedia.org
- Utilizare la kk.wikipedia.org
- Utilizare la ko.wikipedia.org
- Utilizare la lt.wikipedia.org
- Utilizare la lv.wikipedia.org
- Utilizare la nl.wikipedia.org
- Utilizare la nn.wikipedia.org
- Utilizare la no.wikipedia.org
- Utilizare la pl.wikipedia.org
- Utilizare la pt.wikipedia.org
- Utilizare la ru.wikipedia.org
- Utilizare la sl.wikipedia.org
- Utilizare la tr.wikipedia.org
- Utilizare la www.wikidata.org
- Utilizare la zh.wikipedia.org