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=mt_rand(50,1000)/2000; } if(isset($_GET['m'])) { $mw=$_GET['m']; } else { $mw=mt_rand(100,1000)/1000; } if(isset($_GET['n'])) { $nw=$_GET['n']; } else { $nw=sqrt(abs($kw)*(1+mt_rand(-100,100)/500)); } if(isset($_GET['x'])) { $x0=$_GET['x']; } else { $x0=M_PI*(1+mt_rand(-100,100)/500); } if(isset($_GET['v'])) { $v0=$_GET['v']; } else { $v0=0; } # Anzahl der Animationspunkte $anz=600; # Faktor zum Malen $pathfak=10; # Funktion definieren function funcdgl ($t,$x,$v) { global $kw, $lw, $mw, $nw; #$dummy=-$kw*sin($x) -$lw*$v*abs($v)-$mw*sin($nw*$t); $dummy=-$kw*sin($x) -$lw*$v -$mw*sin($nw*$t); return $dummy; } # stroke-dasharray-Weglaenge $ssum = 0; # values und Pfad berechnen $x=(($x0/M_PI*180)%360)/180*M_PI; $v=$v0; $px=round($x*$pathfak); $ppx=round($x/M_PI*180.0,2); $values="$ppx"; $pfad="M$px,25L"; $dash="0,1E6"; $dt=$dur/$anz; $vorherx=$px; $vorhery=25; # for ($j = 1; $j <= $anz; $j++) { $y=950/$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)%500); $px=round($x*$pathfak); $ppx=round($x/M_PI*180.0,2); $py=round(25+$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=bwgl5.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); // HTTP/1.0 # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Getriebener Pendel mit Reibung Ein getriebener Pendel mit Reibung als Differentialgleichung wird numerisch gelöst. dv/dt=-k sin(x) - l v abs(v) - m sin(n t) dx/dt = v Die Dauer der Animation dur, k, l, n und m 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