Image:Foucault-anim.gif
From Wikipedia, the free encyclopedia
No higher resolution available.
Foucault-anim.gif (640 × 480 pixel, file size: 130 KB, MIME type: image/gif)
This is a file from the Wikimedia Commons. The description on its description page there is shown below. | |
[edit] Description
Description |
Français : Animation d'un pendule de Foucault de 67 mètres fictif laché à une distance de 50,25 mètres (3/4 de sa longueur) à l'est avec une vitesse nulle. La rotation de la Terre est également exagérée et correspond à une rotation en 110 secondes. Le programme de l'animation Gnuplot est fourni (GPL)
English: Animation of a fictitious pendulum of Foucault of 67 meters released at a distance of 50,25 meters (3/4 its length) in the east with a null speed. The rotation of the Earth is also exaggerated and corresponds to a rotation in 110 seconds. Source of the Gnuplot animation is provided (GPL)
Deutsch: Belebung eines fiktiven Pendels von Foucault von 67 Metern, das an einer Distanz von 50,25 Metern (3/4 von ihrer Länge) im Osten mit einer Null-Geschwindigkeit befreit wurde. Die Rotation der Erde wird ebenfalls übertrieben und entspricht einer Umdrehung in 110 Sekunden. Das Programm der Gnuplot-Belebung wird geliefert (GPL)
|
---|---|
Source |
own work |
Date |
2007.03.12 |
Author |
Nbrouard |
Permission |
see below |
Other versions | Media:foucault-rotz.gif |
reset set ter x11 # or windows on Windows # Programme Gnuplot foucault-anim.gp, ne fonctionne qu'avec une version >=4.2 et une libgd récente # Nbrouard 7 mars 2002 v1.0 Sous licence GPL. GNU General Public License # Nbrouard 12 mars 2007 v1.1 # Ajout de l'ellipse et simplification des équations # Nbrouard 14 mars 2007 v1.2 # Ajout du fil du pendule. # Nbrouard 16 mars 2007 v1.4 # Suppression des axes et ajout d'une coupole # Indication pour le traitement des caractères unicode UTF-8 # Nbrouard 21 mars 2007 v1.5 # Ajout gifsicle pour réduire la taille. # # Dernière version sous http://commons.wikimedia.org/wiki/Image:Foucault-rotz.gif g=9.81 # gravité g/s2 l=67. # longueur du pendule en mètres omega=sqrt(g/l) # Choisir la vitesse de rotation de la Terre Omega=2.*pi/24./3600. # Rotation de la Terre, 24 heures par jour Omega=2.*pi/(23.+(56./60.))/3600. # Rotation de la Terre, 23h56 jour sidéral (pour le 3e dessin) Omega=2.*pi/3600.*60. # Rotation très rapide en 1/60e d'heure pour un dessin Omega=2.*pi/3600./24.*24.*60./1.5 # Rotation très rapide en 2/3*1/60e d'heure 90 secondes pour le premier dessin Omega=2.*pi/3600./24.*24.*60./3.5 # Rotation très rapide en 3.5 1/60e d'heure soit 110 secondes pour le second dessin print "Période de la Terre 2.*pi/Omega= ",2.*pi/Omega, " secondes" theta=(48.+52./60.)/360*2.*pi # latitude de 48 degrés 52 minutes omegz=sqrt(omega*omega+Omega*Omega*sin(theta)*sin(theta)) complex(x,y)=x*{1,0}+y*{0,1} # fonction utile # cas où le pendule est propulsé du centre avec une vitesse de 2m/s (cas irréaliste non dessiné) z0={0,0} vz=2 # Si propulsé au centre avec une vitesse de 2 m/s zp0=complex(vz,0) # cas 'historique' où le pendule est lancé sans vitesse # initiale à z0 mètres à l'est du centre. z0={6.,0} # pour le 3e dessin z0=l*3./4.*{1,0} # pour les premier et second dessins zp0={0,0} print "Vitesse initiale ",zp0 c1=z0/2.*(1+Omega/omegz*sin(theta))*{1,0}-zp0/2./omegz*{0,1} c2=z0/2.*(1-Omega/omegz*sin(theta))*{1,0}+zp0/2./omegz*{0,1} unset label eix(x)=cos(x)*{1,0}+sin(x)*{0,1} #z(t)=c1*eix(-(Omega*sin(theta)-omegz)*t) + c2*eix(-(Omega*sin(theta)+omegz)*t) z(t)=eix(-(Omega*sin(theta))*t)*(z0*(cos(omegz*t)*{1,0}+Omega*sin(theta)/omegz*sin(omegz*t)*{0,1})+zp0/omegz*sin(omegz*t)) set parametric # Trace dans le pseudo plan d'oscillation (pas dessiné) #plot real(c1*eix(omegz*t)+c2*eix(-omegz*t)), imag(c1*eix(omegz*t)+c2*eix(-omegz*t)) #plot [t=0:3.65*2.*pi/omegz] [-abs(z0):abs(z0)] [-abs(z0):abs(z0)] real(z(t)),imag(z(t)) h(t)=-sqrt(l*l-abs(z(t))*abs(z(t)))+l hz=h(0) # La coupole du Panthéon : nombre d'ogives 3 par défaut # Il faut la tracer en paramétrique pour t variant de O à tf. nogives=3. spx(t,tf)= l*(cos(floor(t/tf*nogives)*pi/nogives)*cos(t/tf*pi*nogives)) spy(t,tf)= l*(sin(floor(t/tf*nogives)*pi/nogives)*cos(t/tf*pi*nogives)) sph(t,tf)= l*abs(sin(t/tf*pi*nogives)) # Le fil px(t,tf)= t/tf*real(z(tf)) py(t,tf) =t/tf*imag(z(tf)) ph(t,tf) =l+t/tf*(h(tf)-l) #--- Paramètres # Langues lang="de" lang="en" lang="fr" # par défaut # Type de repère fixe=0 # Dessin dans le repère terrestre #fixe=1 # Dessin dans le plan du pendule # Taille des fichiers animés thumb=-1 # X11 or Win thumb=0 # 640x480 #thumb=1 # 180x135 Miniatures par défaut de Wikipédia split=1 # Si on souhaite des fichiers images séparés (dans un sous-répertoire) split=0 #utf8=1 # voir plus bas #-- Fin des paramètres # Pour traiter des caractères UTF-8, il faut obtenir par exemple des polices TrueType # voir le site http://corefonts.sourceforge.net/ # Dans ce cas on peut faire set ter gif font "arial" 14 mais il faut # que l'environnement GDFONTPATH pointe sur le répertoire TrueType :export GDFONTPATH="/usr/share/fonts/msttcorefonts/" # export GNUPLOT_DEFAULT_GDFONT="arial" if(lang ne "fr") ficlang=sprintf("-%s",lang); else ficlang=""; if (lang eq "de") Est="Osten"; Ouest="Westen"; Nord="Norden"; Sud="Süden"; \ else if (lang eq "en") Est="East"; Ouest="West"; Nord="North"; Sud="South"; \ else Est="Est"; Ouest="Ouest"; Nord="Nord"; Sud="Sud"; unset label set label Est at l*1.2,0,0 center set label Ouest at -l*1.2,0,0 center set label Nord at 0,l*1.2,0 center set label Sud at 0,-l*1.2,0 center #set xlabel "Ouest <-> Est en metres" #set ylabel "Sud <-> Nord en metres" #set samples 100 set xyplane at 0 #set size 0.75,1 # aspect circulaire 480/640=0.75 # Merci à Michel Barbetorte 07/03/07 rotationz=28 rotationz=0 rotationx=50 #set view rotationx,rotationz,1,1.5 set view rotationx,rotationz,1,1.0 # dessin à l'écran pour voir splot [t=0:3.65*2.*pi/omegz] [:] [-abs(z0):abs(z0)] [-abs(z0):abs(z0)] [0:l] real(z(t)),imag(z(t)),((t<pi/omegz)&&(t>0)?h(t):1/0) with lines lt palette , real(z(t)),imag(z(t)),0 with lines unset title unset key unset xtics unset ytics unset ztics set border 0 set size square set size 1.3,1.3 set size 1.5,1.5 set size 1.54,1.54 set origin -0.4,-0.15 #set origin -0.4,-0.15 set origin -0.2,-0.15 sampbase=700 set samples sampbase n=24 tdelta=2.*pi/omegz/n tfin=12*2.*pi/omegz tfin=3*2.*pi/omegz #tfin=pi/omegz limit_iterations=9*n #limit_iterations=6 #limit_iterations=13 tmin=1.e-3 tdeb=tdelta tdeb=tmin iteration_count=0 if(fixe==1) rotationz=80.; else rotationz=28. set view rotationx,rotationz,1,1.0 #set ter gif size 640,480 large animate optimize # set ter gif animate optimize size 640,480 \ # xffffff x000000 x404040 \ # xff0000 xffa500 x66cdaa xcdb5cd \ # xadd8e6 x0000ff xdda0dd x9500d3 # defaults if(thumb==1) xpix=180;ypix=135; else xpix=640;ypix=480; #if(thumb==1) xpix=180;ypix=135; else xpix=540;ypix=405; if(fixe==1) tfixe="rotz";else tfixe="anim"; iteration_count=0 if(thumb==1) labpix=sprintf("%dx%d-",xpix,ypix); else labpix=""; if(split != 1) ficsortie=sprintf("%sfoucault-%s%s.gif",labpix,tfixe,ficlang) # else voir dans la boucle if(thumb==-1) set ter x11; set out; else if(split==1) set ter gif animate optimize size xpix,ypix xffffff x000000 xa0a0a0 xff0000 x00c000 x0080ff xc000ff x00eeee ; set out; else set ter gif animate optimize size xpix,ypix xffffff x000000 xa0a0a0 xff0000 x00c000 x0080ff xc000ff x00eeee; set out ficsortie; show ter show output rotationdynz=rotationz/360.*2.*pi if(fixe==1) rotationzinc=-tdelta*Omega*sin(theta); else rotationzinc=0 call "foucault-rot-ellipse.gp" "Rotationz" rotationzinc split set ter X11 set out replot # Gnuplot 2.3 rc4 semble moins bien optimser que gifsicle ou Gimp pour réduire sa taille. # Ici on a fait : #! gifsicle -O2 -k8 foucault-rot.gif -o foucault-rotz.gif # Fin
Nous avons besoin d'un programe d'itération pour faire plusieurs images:
# Foucault-iter.gp # Version 1.5 du 21 mars 2007 # Dernière version sous http://commons.wikimedia.org/wiki/Image:Foucault-rotz.gif if(split==1) ficsortie=sprintf("foucault-%s%s/%sfoucault-%s%s-%d.gif",tfixe,ficlang,labpix,tfixe,ficlang,iteration_count);set out ficsortie print "Fichier Rotationz=$0 rotationzinc=$1 split=$2 ficsortie=",ficsortie print "1-rotationdynz=",rotationdynz, " deg=", rotationdynz/2./pi*360. rotationdynz=rotationdynz+$1 rotationdyndegz=rotationdynz/2./pi*360. rotationdyndegz=rotationdyndegz -int(rotationdyndegz/360.)*360. if(rotationdyndegz<0) rotationdyndegz=rotationdyndegz+360. print "2-rotationdynz=",rotationdynz, " deg=", rotationdyndegz set view ,rotationdyndegz,, iteration_count=iteration_count+1 if(tdeb/tdelta>sampbase) set samples tdeb*sampbase/tdelta znonrot(t)=eix(-Omega*sin(theta)*(tdeb-t))*z(t) print "iteration_count in ", iteration_count," limit_iterations ", limit_iterations, " tdeb ",tdeb," xnonrot(tdeb) ", real(znonrot(tdeb))," ynonrot(tdeb) ",imag(znonrot(tdeb)) # splot [t=0:tdeb] [:] [-abs(z0):abs(z0)] [-abs(z0):abs(z0)] [0:l] if (((!limit_iterations) || (iteration_count<=limit_iterations)) && (tdeb <= tfin)) \ print "iteration_count loop ",iteration_count; \ splot [t=0:tdeb] [:] [-l:l] [-l:l] [0:l] \ real(z(t)),imag(z(t)),0 not with lines lc rgb 'green', \ real(znonrot(t)),imag(znonrot(t)),((0<=t)&&(t<=tdeb)?h(t):1/0) not with lines lc rgb 'blue', \ px(t,tdeb),py(t,tdeb),((0<=t)&&(t<=tdeb)?ph(t,tdeb):1/0) not with lines lt 6, \ real(z(t)),imag(z(t)),((tdeb-tdelta/2.<t)&&(t<=tdeb)?h(t):1/0) not with lines lc rgb 'red' lw 3, \ spx(t,tdeb),spy(t,tdeb),sph(t,tdeb) not with lines lc rgb 'black', \ spx(t,tdeb),-spy(t,tdeb),sph(t,tdeb) not with lines lc rgb 'black'; \ tdeb=tdeb+tdelta; \ print (iteration_count+0.1-0.1)/limit_iterations*100, " pour cent"; \ reread #pause mouse any "Any key or button will terminate" ; \ Doit être avant le reread pour debuguer # print "spx=",spx(tdeb,tdeb)," spy=",spy(tdeb,tdeb)," sph=",sph(tdeb,tdeb)," tdeb=",tdeb; \ # 'blutux.rgb' binary array=128x128 dx=0.1 dy=0.1 flipy rot=0.pi center = (50,-3.5,0) perp=(0,1,0) format='%uchar%uchar%uchar' using ($1+$2+$3)/3. with image
[edit] Licensing
File links
The following pages on the English Wikipedia link to this file (pages on other projects are not listed):