1000)){ $dur=120; } # Parameter k,l if(isset($_GET['k'])) { $kw=$_GET['k']; } else { $kw=2*M_PI/$dur; $kw=$kw*$kw*100; } if(isset($_GET['l'])) { $lw=$_GET['l']; } else { #$lw=$kw*mt_rand(100,1000)/1000; $lw=$kw*0.3; } if(isset($_GET['m'])) { $mw=$_GET['m']; } else { #$mw=M_PI*mt_rand(-100,100)/1000; $mw=M_PI; } if(isset($_GET['n'])) { $nw=$_GET['n']; } else { $nw=mt_rand(10,100)/10000; } if(isset($_GET['x'])) { $x0=$_GET['x']; } else { $x0=(1+mt_rand(-100,100)/200); } if(isset($_GET['v'])) { $v0=$_GET['v']; } else { $v0=-1.0*mt_rand(500,1000)/1000; } # Anzahl der Animationspunkte $anz=600; #Anfangswert: #$x0=0; #$v0=-1.0*mt_rand(10,1000)/1000; #$v0=0; #$pathfak=50/$x0; $pathfak=50; # Funktion definieren function funcdgl ($t,$x,$v) { global $kw, $lw, $mw, $nw; $dummy=-$kw*sin($x-$mw) -$lw*$x -$nw*$v; return $dummy; } # stroke-dasharray-Weglaenge $ssum = 0; # values und Pfad berechnen $x=$x0; $v=$v0; $px=round($x*$pathfak); $ppx=round($x/M_PI*180.0,2); $values="$ppx"; $pfad="M$px,0L"; $dash="0,1E6"; $dt=$dur/$anz; $vorherx=$px; $vorhery=0; # for ($j = 1; $j <= $anz; $j++) { $y=1000/$anz*$j; $t=$dt*$j; $kutta1=funcdgl($t,$x,$v); $kutta2=funcdgl($t+$dt/2.0,$x+$v*$dt/2.0+$kutta1/8.0*$dt*$dt,$v+$kutta1*$dt/2.0); $kutta3=funcdgl($t+$dt/2.0,$x+$v*$dt/2.0+$kutta1/8.0*$dt*$dt,$v+$kutta2*$dt/2.0); $kutta4=funcdgl($t+$dt,$x+$v*$dt+$kutta3/2.0*$dt*$dt,$v+$kutta3*$dt); $x=$x +$v*$dt+$dt*$dt*($kutta1+$kutta2+$kutta3)/6.0; $v=$v+$dt*($kutta1+2.0*$kutta2+2.0*$kutta3+$kutta4)/6.0; $px=round($x*$pathfak); $ppx=round($x/M_PI*180.0,2); $py=round($y); $values .=";$ppx"; $pfad .=" $px,$py"; $hx=$px-$vorherx; $hy=$py-$vorhery; $ssum = $ssum+sqrt($hx*$hx+$hy*$hy); $vorherx=$px; $vorhery=$py; $psum=round($ssum); $dash .=";$psum,1E6"; } # svg-header senden: $content="Content-type: image/svg+xml"; header($content); # Automatisches Neuladen, muss nicht funktionieren! if ($auto=="ja") { $dura=$dur+5; $content="refresh: $dura; url=bwgl6.php?auto=ja&dur=$dur&k=$kw&l=$lw&m=$mw&n=$nw&x=$x&v=$v"; } # Sicherstellen dass dann auch neu vom server geladen wird: header($content); # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Kombination aus Pendel und harmonischen Oszillator mit Reibung Folgende Bewegungsgleichung wird numerisch gelöst: dv/dt=- k sin(x - m) - l x - n v dx/dt = v Die Dauer der Animation dur, k, l, m und n sind als GET-Parameter verfügbar. " xlink:title="fortsetzen"> " xlink:title="Neu starten und dann jeweils nach Ablauf der Animation automatisch neu starten (muß nicht bei allen Darstellungsprogrammen funktionieren)"> " xlink:title="Neue Animation starten, weiteren automatischen Neustart unterbinden"> O H 2006