Datei:Driven-pendulums-resonance-animation.gif
Aus testwiki
Zur Navigation springen
Zur Suche springen
Driven-pendulums-resonance-animation.gif (220 × 136 Pixel, Dateigröße: 120 KB, MIME-Typ: image/gif, Endlosschleife, 100 Bilder, 4,0 s)
Diese Datei stammt aus Wikimedia Commons und kann von anderen Projekten verwendet werden. Die Beschreibung von deren Dateibeschreibungsseite wird unten angezeigt.
Beschreibung
| BeschreibungDriven-pendulums-resonance-animation.gif |
English: Animation of three identical pendulums of resonance frequency ω0 and damping D=0.05. The pendulums are driven with the same strength, but different driving frequencies ω:
|
| Datum | |
| Quelle |
Eigenes Werk |
| Urheber | Geek3 |
Source Code
The plot was generated with Python Matplotlib.
| Python Matplotlib source code |
|---|
#!/usr/bin/python
# -*- coding: utf8 -*-
import os
import inspect
from math import *
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import animation
# settings
mpl.rcParams['path.snap'] = False
fname = 'driven-pendulums-resonance-animation'
size = 220, 136
nframes = 100
susp = 16
f0 = 3.0
pendulums = [
{'x0':29, 'y0':117.5, 'f':2.0, 'A':4, 'D':0.05, 'l':89, 'phi0':0.},
{'x0':110, 'y0':117.5, 'f':3.0, 'A':4, 'D':0.05, 'l':89, 'phi0':0.},
{'x0':191, 'y0':117.5, 'f':4.0, 'A':4, 'D':0.05, 'l':89, 'phi0':0.}]
for p in pendulums:
D = p['D']
eta = p['f'] / f0
# use harmonic approximation
p['Arel'] = 1.0 / sqrt((1. - eta**2)**2 + (2.*eta*D)**2)
p['Phaserel'] = atan2(2 * eta * D, 1.0 - eta**2)
def animate(nframe, saveframes=False):
print nframe, nframes
t = float(nframe) / nframes
plt.clf()
fig.gca().set_position((0, 0, 1, 1))
plt.xlim(0, size[0])
plt.ylim(0, size[1])
plt.axis('off')
for p in pendulums:
dxSusp = p['A'] * sin(p['phi0'] + 2*pi*p['f']*t)
dsPend = p['A'] * sin(p['phi0'] + 2*pi*p['f']*t - p['Phaserel']) * p['Arel']
PhiPend = (dsPend - dxSusp) / p['l']
dxPend = dxSusp + p['l'] * sin(PhiPend)
dyPend = -p['l'] * cos(PhiPend)
xSusp = p['x0'] + dxSusp
xPend = p['x0'] + dxPend
yPend = p['y0'] + dyPend
# draw pendulum
s = 0.72
plt.plot([p['x0'] - susp, p['x0'] + susp],
[p['y0'], p['y0']], '-k', lw=3)
plt.plot([xSusp, xPend], [p['y0'], yPend], '-k', lw=1.5)
plt.plot([xSusp], [p['y0']], '.k', markersize=12)
plt.plot([xPend], [yPend], 'o', color='#aaaaaa',
markersize=14, markeredgewidth=1.5)
if saveframes:
# export frame
dig = int(ceil(log10(nframes)))
fsavename = ('frame{:0' + str(dig) + '}.svg').format(nframe)
fig.savefig(fsavename)
with open(fsavename) as f: content = f.read()
content = content.replace('pt"', 'px"').replace('pt"', 'px"')
with open(fsavename, 'w') as f: f.write(content)
fig = plt.figure(figsize=(size[0]/72., size[1]/72.))
#anim = animation.FuncAnimation(fig, animate, frames=nframes)
#anim.save(fname + '.gif', writer='imagemagick', fps=25)
# use imagemagick on svgs rather than builtin imagemagick support
# this avoids snapping and offers some custom settings
os.chdir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
for i in range(nframes):
animate(i, True)
os.system('convert -loop 0 -delay 4 frame*.svg +dither -posterize 16 ' + fname + '.gif')
for i in os.listdir('.'):
if i.startswith('frame') and i.endswith('.svg'):
os.remove(i)
|
Lizenz
Ich, der Urheberrechtsinhaber dieses Werkes, veröffentliche es hiermit unter der folgenden Lizenz:
| Es ist erlaubt, die Datei unter den Bedingungen der GNU-Lizenz für freie Dokumentation, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation, zu kopieren, zu verbreiten und/oder zu modifizieren; es gibt keine unveränderlichen Abschnitte, keinen vorderen und keinen hinteren Umschlagtext.
Der vollständige Text der Lizenz ist im Kapitel GNU-Lizenz für freie Dokumentation verfügbar.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
Diese Datei ist unter der Creative-Commons-Lizenz „Namensnennung 3.0 nicht portiert“ lizenziert.
- Dieses Werk darf von dir
- verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
- neu zusammengestellt werden – abgewandelt und bearbeitet werden
- Zu den folgenden Bedingungen:
- Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
Du darfst es unter einer der obigen Lizenzen deiner Wahl verwenden.
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
10. April 2016
image/gif
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
| Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
|---|---|---|---|---|---|
| aktuell | 22:08, 10. Apr. 2016 | 220 × 136 (120 KB) | wikimediacommons>Geek3 | smaller drive amplitude |
Dateiverwendung
Die folgende Seite verwendet diese Datei:
