100) ){ $anz=6; } } else { $anz=6; } # runden auf wieviel Stellen / rounding to how many digits if(isset($_GET['rnd'])) { $runden=$_GET['rnd']; if (($runden < 0)OR($runden > 10) ){ $runden=2; } } else { $runden=2; } $cx=0; $cy=0; $rx=100; $ry=100; $phideg=0; $ant[0]=0; $ant[1]=mt_rand(1,100); $ant[2]=mt_rand(1,100); $ant[3]=mt_rand(1,100); $ant[4]=mt_rand(1,100); $ant[5]=mt_rand(1,100); $ant[6]=mt_rand(1,100); $ants=0; for ($i = 1; $i <=6; $i++) { $ants=$ants+$ant[$i]; } $th0=0; for ($i = 1; $i <=6; $i++) { $title[$i]=round($ant[$i]/$ants,$runden); $del[$i]=$ant[$i]/$ants*360; $the[$i]=$th0; $th0=$th0+$del[$i]; } for ($i = 1; $i <=6; $i++) { $thetadeg=$the[$i]; $deltadeg=$del[$i]; # Auswertung beginnen: # (start evaluation) $rx=abs($rx); $ry=abs($ry); $phideg=fmod($phideg,360); $thetadeg=fmod($thetadeg,360); $deltadeg=fmod($deltadeg,360); $phi=$phideg*M_PI/180; $theta=$thetadeg*M_PI/180; $delta=$deltadeg*M_PI/180; $ca=cos($phi); $sa=sin($phi); $xh1=$rx*cos($theta); $yh1=$ry*sin($theta); $xh2=$rx*cos($theta+$delta); $yh2=$ry*sin($theta+$delta); $x1=round($ca*$xh1-$sa*$yh1+$cx,$runden); $y1=round($sa*$xh1+$ca*$yh1+$cy,$runden); $x2=round($ca*$xh2-$sa*$yh2+$cx,$runden); $y2=round($sa*$xh2+$ca*$yh2+$cy,$runden); if (abs($deltadeg)>180) { $fA = 1; } else { $fA = 0; } if ($deltadeg>0) { $fS = 1; } else { $fS = 0; } # darstellen oder nicht? # to present or not? $flag1=($rx*$ry>0); $flag2=(!(($x1==$x2) AND ($y1==$y2))); $flag= ($flag1 AND $flag2); $pfad[$i]='M0,0Z'; if ($flag) { $pfad[$i]="M0,0 $x1,$y1 A$rx,$ry $phideg $fA,$fS $x2,$y2 Z"; } elseif ($flag2) { $pfad[$i]="M0,0 $x1,$y1 L$x2,$y2 Z"; $pfada[$i]="M0,0 $x1,$y1 L$x2,$y2 Z"; } if ($flag) { # Datensatz erzeugen / Interpolation $dphi=$delta/$anz; for ($j = 0; $j <= $anz; $j++) { $tt=$dphi*$j; $cpi=cos($tt+$theta); $spi=sin($tt+$theta); # Punkte / points $xx=$rx*$cpi; $yy=$ry*$spi; # Ableitungen / derivatives ... $dx=-$dphi*$rx*$spi; $dy=$dphi*$ry*$cpi; # rotieren / rotate $data[$j][0]=$ca*$xx-$sa*$yy+$cx; $data[$j][1]=$sa*$xx+$ca*$yy+$cy; $data[$j][2]=$ca*$dx-$sa*$dy; $data[$j][3]=$sa*$dx+$ca*$dy; } # Aus den Ableitungen die Kontrollpunkte berechnen # (generate control points from derivatives) $cp[0][0]=round($data[0][0]+$data[0][2]/3,$runden); $cp[0][1]=round($data[0][1]+$data[0][3]/3,$runden); for ($j = 0; $j <= $anz; $j++) { $cq[$j][0]=round($data[$j][0]-$data[$j][2]/3,$runden); $cq[$j][1]=round($data[$j][1]-$data[$j][3]/3,$runden); # und nun erst Punkte runden / and now round points $data[$j][0]=round($data[$j][0],$runden); $data[$j][1]=round($data[$j][1],$runden); } # Daraus Pfad bestimmen und malen der Punkte vorbereiten # (generate path data and prepare for painting) $pfada[$i]='M0,0 '.$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"; for ($j = 2; $j <=$anz; $j++) { $pfada[$i].=$cq[$j][0].' '.$cq[$j][1].' '.$data[$j][0].' '.$data[$j][1]."\n"; } $pfada[$i].='z'; ################################### } } # svg-header senden: $content="Content-type: image/svg+xml; charset=iso-8859-1"; header($content); # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Tortendiagramm Diagramme mit sechs zufälligen Einteilungen, links mit Kreissegmenten, rechts mit kubischen Segmenten. ... mit Kreissegmenten ... mit kubischen Segmenten