1000)){ $dur=200; } # Parameter k,l if(isset($_GET['k'])) { $kw=$_GET['k']; } else { $kw=2*M_PI/$dur; #$kw=$kw*$kw*100; $kw=1; } if(isset($_GET['l'])) { $lw=$_GET['l']; } else { $lw=$kw*mt_rand(-10000,10000)/500; #$lw=10*$kw; #$lw=100; } # Wechselwirkungsradius if(isset($_GET['w'])) { $wwr=$_GET['w']; } else { $wwr=mt_rand(100,10000)/1000; } if(isset($_GET['x1'])) { $x10=$_GET['x1']; } else { $x10=(2*mt_rand(0,1)-1)*mt_rand(200,400)/1000; } if(isset($_GET['v1'])) { $v10=$_GET['v1']; } else { $v10=mt_rand(-1000,1000)/2000; } if(isset($_GET['x2'])) { $x20=$_GET['x2']; } else { $x20=(2*mt_rand(0,1)-1)*mt_rand(200,400)/1000; } if(isset($_GET['v2'])) { $v20=$_GET['v2']; } else { $v20=mt_rand(-1000,1000)/2000; } if(isset($_GET['y1'])) { $y10=$_GET['y1']; } else { $y10=(2*mt_rand(0,1)-1)*mt_rand(200,400)/1000; } if(isset($_GET['w1'])) { $w10=$_GET['w1']; } else { $w10=mt_rand(-1000,1000)/2000; } if(isset($_GET['y2'])) { $y20=$_GET['y2']; } else { $y20=(2*mt_rand(0,1)-1)*mt_rand(200,400)/1000; } if(isset($_GET['w2'])) { $w20=$_GET['w2']; } else { $w20=mt_rand(-1000,1000)/2000; } # Anzahl der Animationspunkte $anz=min(1000,10*$dur); # Faktor-Ausdehnung: $pathfak=600; # Funktion definieren function funcdgl ($t,$x1,$v1,$x2,$v2,$y1,$w1,$y2,$w2,&$ax1,&$ax2,&$ay1,&$ay2) { global $kw, $lw, $maxr, $wwr; if (($wwr==0) or ($lw==0)) { # Zentralpotential harmonisch $ax1=-$kw*$x1; $ax2=-$kw*$x2; $ay1=-$kw*$y1; $ay2=-$kw*$y2; } else { # Abstoßung gegenseitig: $dx=$x1-$x2; $dy=$y1-$y2; $r=($dx*$dx+$dy*$dy+$wwr*$wwr)**1.5; #$maxr=max($maxr, $r); $rf=min(1, max(-1, $wwr))/$r; #Beschleunigung: $bx1=$rf*$dx*$lw; $by1=$rf*$dy*$lw; $bx2=-$rf*$dx*$lw; $by2=-$rf*$dy*$lw; # plus Zentralpotential harmonisch $ax1=$bx1-$kw*$x1; $ax2=$bx2-$kw*$x2; $ay1=$by1-$kw*$y1; $ay2=$by2-$kw*$y2; } return TRUE; } # stroke-dasharray-Weglaenge $ssum1 = 0; $ssum2 = 0; # values und Pfad berechnen $x1=$x10; $v1=$v10; $x2=$x20; $v2=$v20; $y1=$y10; $w1=$w10; $y2=$y20; $w2=$w20; $px=round($x1*$pathfak); $py=round($y1*$pathfak); $values1="$px,$py"; $pfad1="M$px,$py L"; $vorherx1=$px; $vorhery1=$py; $dash1="0,1E6"; $px=round($x2*$pathfak); $py=round($y2*$pathfak); $values2="$px,$py"; $pfad2="M$px,$py L"; $vorherx2=$px; $vorhery2=$py; $dash2="0,1E6"; $dt=$dur/$anz; # $maxr=0; for ($j = 1; $j <= $anz; $j++) { $t=$dt*$j; $kutta1=funcdgl($t,$x1,$v1,$x2,$v2,$y1,$w1,$y2,$w2,$k11,$k12,$l11,$l12); $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, $y1+$w1*$dt/2.0+$l11/8.0*$dt*$dt,$w1+$l11*$dt/2.0, $y2+$w2*$dt/2.0+$l12/8.0*$dt*$dt,$w2+$l12*$dt/2.0, $k21,$k22,$l21,$l22); $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, $y1+$w1*$dt/2.0+$l21/8.0*$dt*$dt,$w1+$l21*$dt/2.0, $y2+$w2*$dt/2.0+$l22/8.0*$dt*$dt,$w2+$l22*$dt/2.0, $k31,$k32,$l31,$l32); $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, $y1+$w1*$dt+$l31/2.0*$dt*$dt,$w1+$l31*$dt, $y2+$w2*$dt+$l32/2.0*$dt*$dt,$w2+$l32*$dt, $k41,$k42,$l41,$l42); $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; $y1=$y1+$w1*$dt+$dt*$dt*($l11+$l21+$l31)/6.0; $y2=$y2+$w2*$dt+$dt*$dt*($l12+$l22+$l32)/6.0; $w1=$w1+$dt*($l11+2.0*$l21+2.0*$l31+$l41)/6.0; $w2=$w2+$dt*($l12+2.0*$l22+2.0*$l32+$l42)/6.0; $px1=round($x1*$pathfak); $py1=round($y1*$pathfak); $values1 .=";$px1,$py1"; $pfad1 .=" $px1,$py1"; $hx=$px1-$vorherx1; $hy=$py1-$vorhery1; $ssum1 = $ssum1+sqrt($hx*$hx+$hy*$hy); $vorherx1=$px1; $vorhery1=$py1; $psum1=round($ssum1); $dash1 .=";$psum1,1E6"; $px2=round($x2*$pathfak); $py2=round($y2*$pathfak); $values2 .=";$px2,$py2"; $pfad2 .=" $px2,$py2"; $hx=$px2-$vorherx2; $hy=$py2-$vorhery2; $ssum2 = $ssum2+sqrt($hx*$hx+$hy*$hy); $vorherx2=$px2; $vorhery2=$py2; $psum2=round($ssum2); $dash2 .=";$psum2,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=bwglm11.php?auto=ja&dur=$dur&k=$kw&l=$lw&w=$wwr&x1=$x1&v1=$v1&x2=$x2&v2=$v2&y1=$y1&w1=$w1&y2=$y2&w2=$w2"; } # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Zwei Objekte in Potential (5) Harmonisches Zentralpotential und Wechselwirkung zwischen den Objekten. Die Wechselwirkung ähnelt dem Gravitationspotential, ist allerdings so abgewandelt, daß der Parameter w einem weiteren Abstand in einer zusätzlichen Dimension entspricht, also effektiv den Abstand mindestens auf w vergrößert, so daß insbesondere keine Singularität entsteht. Parameter k steht für die Stärke des Zentralpotentials, l für die Wechselwirkung, also negatives l ergibt eine attraktive Wechselwirkung. Animation stoppen " 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 2022