Sector

This script allows to draw the sector of a circle

Informations

Author: Maxime Delorme
License: FPDF

Description

This script allows to draw the sector of a circle. It can be used for example to render a pie chart.

Sector(float xc, float yc, float r, float a, float b [, string style [, boolean cw [, float o]]])

xc: abscissa of the center.
yc: ordinate of the center.
r: radius.
a: starting angle (in degrees).
b: ending angle (in degrees).
style: D, F, FD or DF (draw, fill, fill and draw). Default value: FD.
cw: indicates whether to go clockwise (default value: true>).
o: 0 for right, 90 for top, 180 for left, 270 for bottom). Default value: 90.

Source

<?php require('fpdf.php'); class PDF_Sector extends FPDF { function Sector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { $d0 = $a - $b; if($cw){ $d = $b; $b = $o - $a; $a = $o - $d; }else{ $b += $o; $a += $o; } while($a<0) $a += 360; while($a>360) $a -= 360; while($b<0) $b += 360; while($b>360) $b -= 360; if ($a > $b) $b += 360; $b = $b/360*2*M_PI; $a = $a/360*2*M_PI; $d = $b - $a; if ($d == 0 && $d0 != 0) $d = 2*M_PI; $k = $this->k; $hp = $this->h; if (sin($d/2)) $MyArc = 4/3*(1-cos($d/2))/sin($d/2)*$r; else $MyArc = 0; //first put the center $this->_out(sprintf('%.2F %.2F m', ($xc)*$k, ($hp-$yc)*$k)); //put the first point $this->_out(sprintf('%.2F %.2F l', ($xc+$r*cos($a))*$k, (($hp-($yc-$r*sin($a)))*$k))); //draw the arc if ($d < M_PI/2){ $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) ); }else{ $b = $a + $d/4; $MyArc = 4/3*(1-cos($d/8))/sin($d/8)*$r; $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) ); $a = $b; $b = $a + $d/4; $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) ); $a = $b; $b = $a + $d/4; $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) ); $a = $b; $b = $a + $d/4; $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) ); } //terminate drawing if($style=='F') $op='f'; elseif($style=='FD' || $style=='DF') $op='b'; else $op='s'; $this->_out($op); } function _Arc($x1, $y1, $x2, $y2, $x3, $y3 ) { $h = $this->h; $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1*$this->k, ($h-$y1)*$this->k, $x2*$this->k, ($h-$y2)*$this->k, $x3*$this->k, ($h-$y3)*$this->k)); } } ?>

Example

<?php require('sector.php'); $pdf=new PDF_Sector(); $pdf->AddPage(); $xc=105; $yc=60; $r=40; $pdf->SetFillColor(120, 120, 255); $pdf->Sector($xc, $yc, $r, 20, 120); $pdf->SetFillColor(120, 255, 120); $pdf->Sector($xc, $yc, $r, 120, 250); $pdf->SetFillColor(255, 120, 120); $pdf->Sector($xc, $yc, $r, 250, 20); $pdf->Output(); ?>
View the result here.

Download

ZIP | TGZ

Quelle

http://www.fpdf.org/en/script/script19.php, zuletzt abgerufen 02.10.2016 15:07