Vaizdas:Tautochrone curve.gif
Iš testwiki.
Pereiti į navigaciją
Jump to search
Tautochrone_curve.gif (300 × 200 taškų, rinkmenos dydis: 102 KiB, MIME tipas: image/gif, ciklinis, 80 kadrų, 3,2 s)
Ši rinkmena yra iš Vikiteka ir gali būti naudojama kituose projektuose. Informacija iš failo aprašymo puslapio yra pateikiama žemiau.
Aprašymas
| AprašymasTautochrone 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. |
| Data | m. gegužės 9 d.; new version 2009 m. rugpjūčio |
| Šaltinis | Mano darbas |
| Autorius |
Claudio Rocchini |
| GIF genesis InfoField | |
| Išeitinis kodas 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)
|
Licencija
Aš, šio darbo autoriaus teisių savininkas, publikuoju jį su šiomis licencijomis:
| Suteikiamas leidimas kopijuoti, platinti ir/ar redaguoti šį dokumentą pagal GNU Free Documentation licencijos versijos 1.2 ar bet kurios vėlesnės versijos sąlygas, publikuotas Free Software Foundation; be nekintamų dalių, be priekinių ir galinių tekstinių žymų viršeliuose. Šios licencijos kopija įtraukta dalyje, pavadintoje GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
| Šiam failui taikoma Creative Commons Attribution-Share Alike 3.0 Unported licencija. | ||
| ||
| Licencijos šablonas buvo priskirtas šiam failui kaip GFDL licencijos atnaujinimo dalis.http://creativecommons.org/licenses/by-sa/3.0/CC BY-SA 3.0Creative Commons Attribution-Share Alike 3.0truetrue |
Šiam failui taikoma Creative Commons Attribution 2.5 Generic licencija.
- Jūs galite:
- dalintis – kopijuoti, platinti bei persiųsti šį darbą
- pri(si)taikyti – adaptuoti darbą
- Su šiomis sąlygomis:
- autoriaus nurodymas – Turite pateikti atitinkamą kreditą, pateikti nuorodą į licenciją ir nurodyti, ar buvo atlikti pakeitimai. Tai galite padaryti bet kokiu būdu, bet ne taip, kad licencijos išdavėjas patvirtintų jus ar jūsų naudojimą.
Galite pasirinkti, kurią licenciją norite naudoti.
Captions
Add a one-line explanation of what this file represents
A cycloid is a tautochrone curve. Blue arrows represent the dots' acceleration. In the top right corner graph, t stands for time, and s stands for arc length.
Une cycloïde est une courbe tautochrone. Les flèches bleues représentent l'accélération. Dans le graphique, t est le temps et s l'abscisse curviligne (ou la distance) parcourue.
Items portrayed in this file
vaizduoja
some value
copyright status anglų
copyrighted anglų
source of file anglų
9 gegužės 2007
media type anglų
image/gif
Rinkmenos istorija
Paspauskite ant datos/laiko, kad pamatytumėte rinkmeną tokią, kokia ji buvo tuo metu.
| Data/Laikas | Miniatiūra | Matmenys | Naudotojas | Paaiškinimas | |
|---|---|---|---|---|---|
| dabartinis | 14:15, 1 rugpjūčio 2009 | 300 × 200 (102 KiB) | wikimediacommons>Geek3 | new physically correct version |
Rinkmenos naudojimas
Šis puslapis naudoja šią rinkmeną:
