1000)){ $dur=200; } # 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(49,499)/10000; } if(isset($_GET['m'])) { $mw=$_GET['m']; } else { #$mw=M_PI*mt_rand(-100,100)/1000; $mw=$kw; } if(isset($_GET['n'])) { $nw=$_GET['n']; } else { $nw=$lw; } if(isset($_GET['x1'])) { $x10=$_GET['x1']; } else { $x10=1; } if(isset($_GET['v1'])) { $v10=$_GET['v1']; } else { $v10=0; } if(isset($_GET['x2'])) { $x20=$_GET['x2']; } else { $x20=0; } if(isset($_GET['v2'])) { $v20=$_GET['v2']; } else { $v20=0; } # Anzahl der Animationspunkte $anz=800; # Faktor: $pathfak=500; # Funktion definieren function funcdgl ($t,$x1,$v1,$x2,$v2,&$k1,&$k2) { global $kw, $lw, $mw, $nw; $k1=-$kw*$x1 +$lw*($x2-$x1); $k2=-$mw*$x2 +$nw*($x1-$x2); return TRUE; } # stroke-dasharray-Weglaenge $ssum = 0; # values und Pfad berechnen $x1=$x10; $v1=$v10; $x2=$x20; $v2=$v20; $px=round($x1*$pathfak); $py=round($x2*$pathfak); $ppx=round($x1*180); $ppy=round($x2*180); $values1="$ppx"; $values2="$ppy"; $pfad="M$px,$py L"; $dash="0,1E6"; $dt=$dur/$anz; $vorherx=$px; $vorhery=$py; # for ($j = 1; $j <= $anz; $j++) { $t=$dt*$j; $kutta1=funcdgl($t,$x1,$v1,$x2,$v2,$k11,$k12); $kutta2=funcdgl($t+$dt/2.0, $x1+$v1*$dt/2.0+$k11/8.0*$dt*$dt,$v1+$k11*$dt/2.0, $x2+$v2*$dt/2.0+$k12/8.0*$dt*$dt,$v2+$k12*$dt/2.0, $k21,$k22); $kutta3=funcdgl($t+$dt/2.0, $x1+$v1*$dt/2.0+$k21/8.0*$dt*$dt,$v1+$k21*$dt/2.0, $x2+$v2*$dt/2.0+$k22/8.0*$dt*$dt,$v2+$k22*$dt/2.0, $k31,$k32); $kutta4=funcdgl($t+$dt, $x1+$v1*$dt+$k31/2.0*$dt*$dt,$v1+$k31*$dt, $x2+$v2*$dt+$k32/2.0*$dt*$dt,$v2+$k32*$dt, $k41,$k42); $x1=$x1 +$v1*$dt+$dt*$dt*($k11+$k21+$k31)/6.0; $x2=$x2 +$v2*$dt+$dt*$dt*($k12+$k22+$k32)/6.0; $v1=$v1+$dt*($k11+2.0*$k21+2.0*$k31+$k41)/6.0; $v2=$v2+$dt*($k12+2.0*$k22+2.0*$k32+$k42)/6.0; $px=round($x1*$pathfak); $py=round($x2*$pathfak); $ppx=round($x1*180); $ppy=round($x2*180); $values1 .=";$ppx"; $values2 .=";$ppy"; $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=bwglm1b.php?auto=ja&dur=$dur&k=$kw&l=$lw&m=$mw&n=$nw&x1=$x1&v1=$v1&x2=$x2&v2=$v2"; } # Sicherstellen dass dann auch neu vom server geladen wird: header($content); # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Gekoppelte Oszillatoren Folgende Bewegungsgleichung wird numerisch gelöst: dv1/dt=- k x1 + l(x2 - x1) dv2/dt=- m x2 + n(x1 - x2) dx1/dt = v1 dx2/dt = v2 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