100) ){ $anz=mt_rand(3,20); } } else { $anz=mt_rand(3,20); } if(isset($_GET['kontrast'])) { $kontrast=$_GET['kontrast']; if (($kontrast < 0)OR($kontrast > 1) ){ $kontrast=mt_rand(0,1000)/1000; } } else { $kontrast=mt_rand(0,1000)/1000; } if(isset($_GET['alpha'])) { $alpha=$_GET['alpha']; if (($alpha < -360)OR($alpha > 360) ){ $alpha=mt_rand(-360,360); } } else { $alpha=mt_rand(-360,360); } $alphag=$alpha; $alpha=$alpha/180*M_PI; if(isset($_GET['delta'])) { $delta=$_GET['delta']; if (($delta < -360)OR($delta > 360) ){ $delta=mt_rand(-360,360); } } else { $delta=mt_rand(-360,360); } $delta=$delta/180*M_PI; # Datensatz erzeugen $hmax=200; $hmin=$hmax*(1-$kontrast)/(1+$kontrast); $ca=cos($alpha); $sa=sin($alpha); $dphi=2*M_PI/$anz; for ($j = 0; $j <= $anz; $j++) { $phi=$dphi*$j; $cpi=cos($phi+$delta); $spi=sin($phi+$delta); $xx=$hmax*$cpi; $yy=$hmin*$spi; $dx=-$dphi*$hmax*$spi; $dy=$dphi*$hmin*$cpi; $data[$j][0]=$ca*$xx-$sa*$yy; $data[$j][1]=$sa*$xx+$ca*$yy; $data[$j][2]=$ca*$dx-$sa*$dy; $data[$j][3]=$sa*$dx+$ca*$dy; } $anz=$anz-1; # Aus den Ableitungen die Kontrollpunkte berechnen $cp[0][0]=$data[0][0]+$data[0][2]/3; $cp[0][1]=$data[0][1]+$data[0][3]/3; for ($j = 0; $j <= $anz; $j++) { $cq[$j][0]=$data[$j][0]-$data[$j][2]/3; $cq[$j][1]=$data[$j][1]-$data[$j][3]/3; } # Daraus Pfad bestimmen und malen der # Punkte vorbereiten $pfada='M'.$data[0][0].' '.$data[0][1].'C'.$cp[0][0].' '.$cp[0][1].' '.$cq[1][0].' '.$cq[1][1].' '.$data[1][0].' '.$data[1][1]."S\n"; $cop1 =''; $cop1 .=''; for ($j = 2; $j <=$anz; $j++) { $pfada.=$cq[$j][0].' '.$cq[$j][1].' '.$data[$j][0].' '.$data[$j][1]."\n"; $cop1 .=''; } $pfada.=$cq[0][0].' '.$cq[0][1].' '.$data[0][0].' '.$data[0][1]."Z\n"; # Alternative Schaetzung der Ableitungen mit besserer Genauigkeit, # falls diese bei dem Datensatz nicht gegeben sind. for ($j = 0; $j <= $anz; $j++) { $jm1=$j-1; $jm2=$j-2; $jp1=$j+1; $jp2=$j+2; if ($jm1 <0) { $jm1=$jm1+$anz+1; } if ($jm2 <0) { $jm2=$jm2+$anz+1; } if ($jp1 >$anz) { $jp1=$jp1-$anz-1; } if ($jp2 >$anz) { $jp2=$jp2-$anz-1; } if ($j==0) { $diff[$j][0]=$data[$j][0]+($data[$jm2][0]-$data[$jp2][0]+8*$data[$jp1][0]-8*$data[$jm1][0])/36; $diff[$j][1]=$data[$j][1]+($data[$jm2][1]-$data[$jp2][1]+8*$data[$jp1][1]-8*$data[$jm1][1])/36; } $diff[$j][2]=$data[$j][0]-($data[$jm2][0]-$data[$jp2][0]+8*$data[$jp1][0]-8*$data[$jm1][0])/36; $diff[$j][3]=$data[$j][1]-($data[$jm2][1]-$data[$jp2][1]+8*$data[$jp1][1]-8*$data[$jm1][1])/36; } # Daraus Pfad bestimmen $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"; } $pfadb.=$diff[0][2].' '.$diff[0][3].' '.$data[0][0].' '.$data[0][1]."Z\n"; # svg-header senden: $content="Content-type: image/svg+xml"; header($content); echo ""; ?> Interpolation Zu interpolierende Ellipse Kubischer Spline aus gegebenen Ableitungen Kubischer Spline aus geschätzten Ableitungen Gegebene Punkte