Fil:Tautochrone curve.gif

Sideinnholdet støttes ikke på andre språk.
Fra Wikipedia, den frie encyklopedi

Tautochrone_curve.gif(300 × 200 piksler, filstørrelse: 102 KB, MIME-type: image/gif, gjentas, 80 rammer, 3,2 s)


Wikimedia Commons' logo

Beskrivelse

Beskrivelse

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.
Dato 9. mai 2007; new version august 2009
Kilde Eget verk
Opphavsperson

Claudio Rocchini

rewritten by Geek3
GIF utvikling
InfoField
 
Denne GIF rastergrafikken ble laget med Matplotlib.
Kildekode
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)

Lisensiering

Jeg, rettighetsinnehaver av dette arbeidet, publiserer det herved under følgende lisenser:
GNU head Det tillates at dette dokumentet kopieres, distribueres og/eller modifiseres under retningslinjene som beskrevet i GNU fri dokumentasjonslisens, versjon 1.2 eller senere utgave utgitt av Free Software Foundation; med alle seksjoner, uten noen forsidetekster og baksidetekster. En kopi av lisensen er inkludert i avsnittet GNU Free Documentation License.
w:no:Creative Commons
navngivelse del på samme vilkår
Denne filen er lisensiert under lisensen Creative Commons Navngivelse-DelPåSammeVilkår 3.0 Unported
Du står fritt:
  • til å dele – til å kopiere, distribuere og overføre verket
  • til å blande – til å endre verket
Under de følgende betingelsene:
  • navngivelse – Du må kreditere verket på passende vis, lenke til lisensen og indikere hvorvidt det har blitt gjort endringer. Du kan gjøre det på enhver rimelig måte, men ikke på en måte som antyder at lisensgiveren støtter deg eller din bruk av verket.
  • del på samme vilkår – Dersom du remikser, omarbeider eller på annen måte bygger på dette verket, må du kun distribuere resultatet under den samme eller en samsvarende lisens som denne.
Dette lisensmerket ble lagt til filen som del av lisensoppdateringen av GFDL.
w:no:Creative Commons
navngivelse
Denne filene er lisensiert under Creative Commons Navngivelse 2.5 Generisk-lisensen
Du står fritt:
  • til å dele – til å kopiere, distribuere og overføre verket
  • til å blande – til å endre verket
Under de følgende betingelsene:
  • navngivelse – Du må kreditere verket på passende vis, lenke til lisensen og indikere hvorvidt det har blitt gjort endringer. Du kan gjøre det på enhver rimelig måte, men ikke på en måte som antyder at lisensgiveren støtter deg eller din bruk av verket.
Du kan velge lisens etter eget valg.

Bildetekster

Legg til en kort forklaring på hva filen representerer

Elementer som er med i denne fila

motiv

image/gif

Filhistorikk

Klikk på et tidspunkt for å vise filen slik den var på det tidspunktet.

Dato/klokkeslettMiniatyrbildeDimensjonerBrukerKommentar
nåværende1. aug. 2009 kl. 15:15Miniatyrbilde av versjonen fra 1. aug. 2009 kl. 15:15300 × 200 (102 KB)Geek3new physically correct version
9. mai 2007 kl. 08:56Miniatyrbilde av versjonen fra 9. mai 2007 kl. 08:56300 × 200 (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 }}

Den følgende siden bruker denne filen:

Global filbruk

Følgende andre wikier bruker denne filen: