Given a circle with a centre point at cx, cy, with a radius cr, this function returns a list of coordinates that make the pixel positions, or integer positions, of the edge of the circle (the circles circumference).
This is known as Bresenhams Circle Algorithm, and is a form of midpoint-circle algorithm that is particularly efficient as it only calculates an 8th of the circles circumference and simply mirrors and flips the generated coordinates 8 times, massively reducing computational costs.
function pointsOnCircumference(cx, cy, cr)
{
var list = new Array();
var x = cr;
var y = 0;
var o2 = Math.floor(1 - x);
while(y <= x)
{
list.push([ x + cx, y + cy]);
list.push([ y + cx, x + cy]);
list.push([-x + cx, y + cy]);
list.push([-y + cx, x + cy]);
list.push([-x + cx, -y + cy]);
list.push([-y + cx, -x + cy]);
list.push([ x + cx, -y + cy]);
list.push([ y + cx, -x + cy]);
y+= 1;
if(o2 <= 0) { o2+= (2 * y) + 1; }
else
{
x-= 1;
o2+= (2 * (y - x)) + 1;
}
}
return list;
}