1000) ){ $anz=3; } } else { $anz=3; } if(isset($_GET['g'])) { $g=$_GET['g']; } else { $g=2.66; } # Datensatz erzeugen, geschlossene Kurve $cop1=""; $rr=40; $kk=0; for ($j = 1; $j <= $anz; $j++) { $ww=($j/$anz+$kk*mt_rand(-1000,1000)/100000)*2*M_PI; $xx=$rr*cos($ww)+$kk*mt_rand(-1000,1000)/1000; $yy=$rr*sin($ww)+$kk*mt_rand(-1000,1000)/1000; $data[$j][0]=round($xx,2); $data[$j][1]=round($yy,2); $cop1 .=' '; } $data[0][0]=$data[$anz][0]; $data[0][1]=$data[$anz][1]; $data[$anz+1][0]=$data[1][0]; $data[$anz+1][1]=$data[1][1]; # Alternative Schaetzung der Ableitungen mit besserer Genauigkeit, # falls diese bei dem Datensatz nicht gegeben sind. $diff[0][0]=round($data[0][0]-$g*($data[$anz-1][0]-$data[1][0])/6,2); $diff[0][1]=round($data[0][1]-$g*($data[$anz-1][1]-$data[1][1])/6,2); $diff[0][2]=round($data[1][0]+$g*($data[$anz-1][0]-$data[1][0])/6,2); $diff[0][3]=round($data[1][1]+$g*($data[$anz-1][1]-$data[1][1])/6,2); $diff[$anz][2]=round($data[$anz][0]+$g*($data[$anz-1][0]-$data[1][0])/6,2); $diff[$anz][3]=round($data[$anz][1]+$g*($data[$anz-1][1]-$data[1][1])/6,2); for ($j = 1; $j <= ($anz-1); $j++) { $jm1=$j-1; $jp1=$j+1; $diff[$j][2]=round($data[$j][0]-$g*($data[$jp1][0]-$data[$jm1][0])/6,2); $diff[$j][3]=round($data[$j][1]-$g*($data[$jp1][1]-$data[$jm1][1])/6,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 .=''; } $pfadb.="z"; # svg-header senden: $content="Content-type: image/svg+xml"; header($content); echo ""; ?> Interpolation Interpolation eines Kreises als Beispiel für eine geschlossene Kurve. Um die Ableitungen/Kontrollpunkte zu berechnen, werden nur die benachbarten Punkte berücksichtigt. Verfügbare Parameter: anz: Anzahl der Punkte g: Krümmungsfaktor, 1 entspricht automatischer Bestimmung wie in SVG. Rot ist ein Vergleichskreis angegeben, blau 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