# Sector

## This script allows to draw the sector of a circle

### Informations

Author: Maxime Delorme

### 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.