Here we use 2 JavaScript functions 'describeArc' and 'polarToCartesian' to draw circle arcs. The function does not allow a full 360° circle, but we can fudge it with a simple alteration.

For the black arc, we use an 'endAngle' of 359.99° instead of 360°. Even with a stroke-width set at 1px, the arc appears to close. You can zoom in as much as you like!

describeArc(375,375,100,0,359.99)

The arcs begin at 12:00 and are drawn clock-wise. 0° is at 12:00; 90° is at 3:00; 180° is at 6:00; 270° is at 9:00.

As you can see, we can alter the stroke-width as well. We use this later to make our donut charts.

View the source code to see the magic.

The JavaScript **describeArc** function can be found here. Or here:

function describeArc(x, y, radius, startAngle, endAngle) { var start = polarToCartesian(x, y, radius, endAngle); var end = polarToCartesian(x, y, radius, startAngle); var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1"; var d = [ "M", start.x, start.y, "A", radius, radius, 0, largeArcFlag, 0, end.x, end.y ].join(" "); return d; }

It calls the **polarToCartesian** JavaScript function to convert degrees to radians:

(JavaScript uses radians not degrees for trigonometric calculations)

var x; var y; var Angle; function polarToCartesian(centerX, centerY, radius, angleInDegrees) { var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; return { x: centerX + (radius * Math.cos(angleInRadians)), y: centerY + (radius * Math.sin(angleInRadians)) }; };

As usual, use your browser 'view source' feature to see how it's done.

Next we do the donut chart.