\n"; $poly="0 0 "; $x=0; $y=0; $xalt=$x; $yalt=$y; # Ableitungen: $xabl=900/$anz; $yabl=-400*2.0*M_PI/$anz; # erster Kontrollpunkt $kx=round($xabl/3.0,1); $ky=round($yabl/3.0,1); $pfad1="M -25, -25 c $kx,$ky "; # Schleife fuer die weiteren Punkte for ($i = 1; $i <= $anz; $i++) { # Randpunkt $x=$i*900/$anz; $y=-400*sin(2.0*M_PI*$i/$anz); # Ableitung fuer y, die fuer x ist in diesem Beispiel #konstant und muss nicht nochmal gerechnet werden $yabl=-400*2.0*M_PI/$anz*cos(2.0*M_PI*$i/$anz); # zweiten Kontrollpunkt rechnen $kx=round($x-$xabl/3.0-$xalt,1); $ky=round($y-$yabl/3.0-$yalt,1); # automatische stetig differenzierbare Fortsetzung # fordern if ($i==2){ $pfad1 .="s "; } $pfad1 .="$kx,$ky "; $px=round($x,1); $py=round($y,1); $ppx=round($x-$xalt,1); $ppy=round($y-$yalt,1); $xalt=$x; $yalt=$y; # Kontrollpunkte und Endpunkte $einzelpunkte .="\n"; $pfad1 .="$ppx,$ppy \n"; $poly .="$px,$py \n"; } # Nochmal das gleiche mit 100 Kurvenstuecken: $anz=100; $x=0; $y=0; $xalt=$x; $yalt=$y; $xabl=900/$anz; $yabl=-400*2.0*M_PI/$anz; $kx=round($xabl/3.0,1); $ky=round($yabl/3.0,1); $pfad2="M 25, 25 c $kx,$ky "; for ($i = 1; $i <= $anz; $i++) { $x=$i*900/$anz; $y=-400*sin(2.0*M_PI*$i/$anz); $yabl=-400*2.0*M_PI/$anz*cos(2.0*M_PI*$i/$anz); $kx=round($x-$xabl/3.0-$xalt,1); $ky=round($y-$yabl/3.0-$yalt,1); if ($i==2){ $pfad2 .="s "; } $pfad2 .="$kx,$ky "; $px=round($x-$xalt,1); $py=round($y-$yalt,1); $pfad2 .="$px,$py \n"; $xalt=$x; $yalt=$y; } # svg-header senden: $content="Content-type: image/svg+xml"; header($content); # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Sinus mit kubischer Bezierkurve genähert Stetig differenzierbar, und optisch schon sehr ähnlich wirkende Näherung des Sinus mit einer Bezierkurve. Vereinfachte Möglichkeit der Verschiebung durch Angabe relativer Koordinaten. Nullpunkt festlegen, Linienzug, Pfad und Einzelpunkte ausgeben.