Objectiu
Dibuixar un diagrama de sectors o ciclograma mitjançant Scalable Vector Graphics a partir d'una relació percentual.
Procediment
Per dibuixar cada sector del diagrama s'han d'emprar els arcs d'SVG. És a dir:
<path d="M xa,ya l xb,yb ara,rb 0 f1,f2 xc,yc z"/>
On
- (xa,ya) és el punt inicial que correspondrà al centre de la circumferència.
- (xb,yb) és el punt final de la primera recta i alhora primer punt de l'arc.
- ra és el valor del radi de la primera el·lipse de la que s'obtindrà l'arc.
- rb és el valor del radi de la segona el·lipse de la que s'obtindrà l'arc.
- f1 i f2 permeten decidir quin dels quatre arcs possibles s'agafa de la intersecció de les el·lipses a i b.
- (xc,yc) és el darrer punt de la secció que enllaçarà amb el punt (xa,ya) tancant el triangle i alhora fa de punt final de l'arc.
Els arcs SVG estan pensats per aconseguir un arc qualsevol. En el cas d'una secció d'un diagrama la formula es simplifica ja que es treballa sobre una circumferència. Per tant es pot dir que:
(xa,ya) és el centre de la circumferència mentre que (xb,yb) és el punt que toca la circumferència.
Per tant la distà ncia de la recta A-B és el radi de la circumferència.
Com que només s'empren arcs basats en una circumferència es pot dir que (ra) = (rb) i alhora serà igual a la distà ncia entre A i B.
Treballant amb punts relatius (l i a i no L i A) podem simplificar la formula del path a:
<path d="M r,r l r,0 ar,r 0 f1,f2 xc,yc z"/>
f1 i f2 poden prendre el valor de 0 o de 1 de manera que es poden obtenir quatre arcs diferents.
L'explicació del W3C és prou extensa i comprensible. És aclaridor el grà fic:
Grà fic original de l'especificació d'SVG del W3C.
Per treballar amb valors positius cal treballar sobre el quart quadrant de la circumferència ja que el punt (0,0) del pla és a l'extrem superior esquerra. En aquest escenari només caldrà contemplar si l'angle és inferior o igual a 180ª per decidir f1 ja que f2 sempre serà 1.
Per tant, si l'angle és inferior o igual a 180º la formula queda en:
<path d="M r,r l r,0 ar,r 0 0,1 xc,yc z"/>
i si l'angle és superior a 180º:
<path d="M r,r l r,0 ar,r 0 1,1 xc,yc z"/>
Ara només queda determinar el tercer punt. Per calcular-lo necessitem saber l'angle per tant amb:
angle = ( percentatge / 100 ) * 360
Sabent l'angle només caldrà aplicar trigonometria per saber la xc i la yc, és a dir:
xc = cos(angle) * r
yc = sin(angle) * r
Aplicant les regles anteriors s'aconsegueix fer un sector. La manera més còmode de fer tot el diagrama és fer tots els sectors aixà i rotar-les a la posició que els toqui.
Per rotar un sector només cal aplicar:
<g transform="rotate(angleAcumulat,r,r)">
<path d="M r,r l r,0 ar,r 0 f1,f2 xc,yc z"/>
</g>
L'angle acumulat serà doncs la suma dels angles anteriors. Per tant pel primer sector angleAcumulat = 0 el que vol dir que no cal aplicar una rotació al primer element.
Comentaris
Comentat per mcdave.net » links for 2007-04-05 el 05/04/07
[...] Dibuix d’un diagrama de sectors mitjançant SVG - a.css, esbudellant està ndards Como hacer diagramas de sectores en SVG (gráficos vectoriales) (tags: svg graphs vector) [...]