100) ){ $anz=mt_rand(0,100); } } else { $anz=0; } # Zufallsgenerator initialisieren mt_srand ((double)microtime()*1000000); #$anz=0; $raus=''; $pfad=''; $du=''; $px[0]=mt_rand(-100,100); $py[0]=mt_rand(-100,100); $cx[0]=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$px[0]; $cy[0]=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$py[0]; if ($anz>=1) { for ($j = 1; $j <= $anz; $j++) { $px[$j]=mt_rand(-100,100); $py[$j]=mt_rand(-100,100); $cx[$j]=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$px[$j]; $cy[$j]=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$py[$j]; $raus.=" \n"; $raus.=" \n"; $pfad.="$cx[$j],$cy[$j] $px[$j],$py[$j] "; } } $j=$anz+1; $px0=mt_rand(-100,100); $py0=mt_rand(-100,100); $px1=mt_rand(-100,100); $py1=mt_rand(-100,100); $cx0=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$px0; $cy0=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$py0; $cx1=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$px1; $cy1=(2*mt_rand(0,1)-1)*mt_rand(100,500)/10+$py1; $px[$j]=$px0; $py[$j]=$py0; # Degenerierung? $d=($px0-$cx0)^2+($py0-$cy0)^2; #Pn(2) = (1+g) P0(0) - g P0(1) if ($d) { $cx[$j]=2*$px0-$cx0; $cy[$j]=2*$py0-$cy0; } else { $d=($px0-$cx1)^2+($py0-$cy1)^2; if ($d) { $cx[$j]=2*$px0-$cx1; $cy[$j]=2*$py0-$cy1; } else { $cx[$j]=2*$px0-$px1; $cy[$j]=2*$py0-$py1; } } $raus.=" \n"; $pfad.="$cx[$j],$cy[$j] $px[$j],$py[$j] "; $p="M$px0,$py0 C $cx0,$cy0 $cx1,$cy1 $px1,$py1 S ".$pfad.' Z'; $raus.=" \n"; $raus.=" \n"; $raus.=" \n"; $raus.=" \n"; $raus.=""; # svg-header senden: $content="Content-type: image/svg+xml"; header($content); echo ''; ?> Stetig differenzierbare geschlossene Kurve Eine kubische Zufallskurve wird stetig differenzierbar geschlossen. Einmal abgesehen von degenerierten Fällen sorgt die Verwendung des Kommandos S in den Pfaddaten dafür, daß die Kurve überall stetig differenzierbar ist. Die Kurve wird auch analog zum Kommando S geschlossen. Es werden mindestens zwei Punkte und zwei Kontrollpunkte benötigt, um eine geschlossene Kurve zu erhalten. Die Anzahl zusätzlicher Punkte kann mit dem GET-Parameter anz angegeben werden.