function computePoints(sprite) {
var r1 = sprite.outerRadius;
var r2 = sprite.innerRadius;
var n = sprite.arms;
var p = sprite.controlPoints;
var s = sprite.connectionPoints;
var l = sprite.straightProportion;
var l1 = sprite.straightOffset;
var l3 = 1 - (l + l1);
for (var i = 0; i < 2 * n; i++) {
var theta = i / n * Math.PI;
var rho = ((i % 2) == 0) ? r1 : r2;
p[i] = [rho * Math.cos(theta), rho * Math.sin(theta)];
}
for (var i = 0; i < 2 * n; i++) {
var p0 = p[i];
var p1 = p[(i+1) % (2 * n)];
if ((i % 2) == 0) {
var even = [p[i][0] + l1 * (p1[0] - p0[0]), p[i][1] + l1 * (p1[1] - p0[1])];
var odd = [p[i][0] + (1 - l3) * (p1[0] - p0[0]), p[i][1] + (1 - l3) * (p1[1] - p0[1])];
}
else {
var even = [p[i][0] + l3 * (p1[0] - p0[0]), p[i][1] + l3 * (p1[1] - p0[1])];
var odd = [p[i][0] + (1 - l1) * (p1[0] - p0[0]), p[i][1] + (1 - l1) * (p1[1] - p0[1])];
}
s[2 * i] = even;
s[2 * i + 1] = odd;
}
}