1000) ){ $anz=mt_rand(5,20); } } else { $anz=mt_rand(5,20); } $anz=$anz-1; if(isset($_GET['g'])) { $g=$_GET['g']; } else { $g=1; } # Datensatz erzeugen $cop1=""; $rr=40; for ($j = 0; $j <= $anz; $j++) { $ww=$j/$anz*2*M_PI; $xx=$rr*cos($ww)+mt_rand(-1000,1000)/100+mt_rand(-1000,1000)/1000; $yy=$rr*sin($ww)+mt_rand(-1000,1000)/100+mt_rand(-1000,1000)/1000; $data[$j][0]=round($xx,2); $data[$j][1]=round($yy,2); $cop1 .=''; } # Alternative Schaetzung der Ableitungen mit besserer Genauigkeit, # falls diese bei dem Datensatz nicht gegeben sind. $diff[0][0]=round($data[0][0]+$g*(-3*$data[0][0]+4*$data[1][0]-$data[2][0])/6,2); $diff[0][1]=round($data[0][1]+$g*(-3*$data[0][1]+4*$data[1][1]-$data[2][1])/6,2); $diff[0][2]=round($data[0][0]-$g*(-3*$data[0][0]+4*$data[1][0]-$data[2][0])/6,2); $diff[0][3]=round($data[0][1]-$g*(-3*$data[0][1]+4*$data[1][1]-$data[2][1])/6,2); $diff[1][2]=round($data[1][0]-$g*(-3*$data[0][0]-10*$data[1][0]+18*$data[2][0]-6*$data[3][0]+$data[4][0])/36,2); $diff[1][3]=round($data[1][1]-$g*(-3*$data[0][1]-10*$data[1][1]+18*$data[2][1]-6*$data[3][1]+$data[4][1])/36,2); $diff[$anz][2]=round($data[$anz][0]+$g*(-3*$data[$anz][0]+4*$data[$anz-1][0]-$data[$anz-2][0])/6,2); $diff[$anz][3]=round($data[$anz][1]+$g*(-3*$data[$anz][1]+4*$data[$anz-1][1]-$data[$anz-2][1])/6,2); $diff[$anz-1][2]=round($data[$anz-1][0]+$g*(-3*$data[$anz][0]-10*$data[$anz-1][0]+18*$data[$anz-2][0]-6*$data[$anz-3][0]+$data[$anz-4][0])/36,2); $diff[$anz-1][3]=round($data[$anz-1][1]+$g*(-3*$data[$anz][1]-10*$data[$anz-1][1]+18*$data[$anz-2][1]-6*$data[$anz-3][1]+$data[$anz-4][1])/36,2); for ($j = 2; $j <= ($anz-2); $j++) { $jm1=$j-1; $jm2=$j-2; $jp1=$j+1; $jp2=$j+2; $diff[$j][2]=round($data[$j][0]-$g*($data[$jm2][0]-$data[$jp2][0]+8*$data[$jp1][0]-8*$data[$jm1][0])/36,2); $diff[$j][3]=round($data[$j][1]-$g*($data[$jm2][1]-$data[$jp2][1]+8*$data[$jp1][1]-8*$data[$jm1][1])/36,2); } # Daraus Pfad bestimmen $cop2=''; $pfadb='M'.$data[0][0].' '.$data[0][1].'C'.$diff[0][0].' '.$diff[0][1].' '.$diff[1][2].' '.$diff[1][3].' '.$data[1][0].' '.$data[1][1]."S\n"; for ($j = 2; $j <=$anz; $j++) { $pfadb.=$diff[$j][2].' '.$diff[$j][3].' '.$data[$j][0].' '.$data[$j][1]."\n"; $cop2 .=''; } # svg-header senden: $content="Content-type: image/svg+xml"; header($content); echo ""; ?> Interpolation Interpolation einer teils zufälligen Kurfe als Beispiel für eine offene Kurve. Verfügbare Parameter: anz: Anzahl der Punkte g: Krümmungsfaktor, 1 entspricht automatischer Bestimmung wie in SVG. Blau ist der kubische Spline. Kleine Kreise geben jeweils die vorgegebenen Punkte an (grüngelb), beziehungsweise die Kontrollpunkte (cyan). Kubischer Spline aus geschätzten Ableitungen Gegebene Punkte Kontrollpunkte