font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
<script src="d3.min.js"></script>
x = Math.sin(2 * Math.PI / 3),
y = Math.cos(2 * Math.PI / 3);
var svg = d3.select("body").append("svg")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")scale(.55)")
var frame = svg.append("g")
.datum({radius: Infinity});
.attr("transform", "translate(" + (radius*0) + ",0) rotate(" + 16 + ")")
.datum({teeth: 11*ratio, radius: radius*ratio, direction: 1})
.attr("transform", "translate(" + (radius*0) + ",0) rotate(" + 16 + ")")
.datum({teeth: 11, radius: radius, direction: 1})
// .attr("class", "planet")
// .attr("transform", "translate(" + -(radius*1.28*2) + ",0)")
// .datum({teeth: 11, radius: radius, direction: -1})
.attr("transform", "translate(" + (radius*(1.58 + ratio2)) + ",0) rotate(23)")
.datum({teeth: 11*ratio2, radius: radius*ratio2, direction: -1/ratio2})
.attr("transform", "translate(" + -(radius*(ratio + 1.58)) + ",0) rotate(1)")
.datum({teeth: 11, radius: radius, direction: -ratio})
.attr("transform", "translate(" + -(radius*(ratio*2 + 1.58 + 1.58)) + ",0) rotate(16)")
.datum({teeth: 11*ratio, radius: radius*ratio, direction: 1})
r0 = Math.abs(d.radius) + radius/2,
a0 = -Math.PI / 2 + (d.annulus ? Math.PI / n : 0),
path = ["M", r0 * Math.cos(a0), ",", r0 * Math.sin(a0)];
path.push("L", r0 * Math.cos(a0), ",", r0 * Math.sin(a0))
path.push("L", r2 * Math.cos(a0), ",", r2 * Math.sin(a0))
path.push("L", r0 * Math.cos(a0), ",", r0 * Math.sin(a0))
path.push("M0,", -r3, "A", r3, ",", r3, " 0 0,0 0,", r3, "A", r3, ",", r3, " 0 0,0 0,", -r3, "Z");
var angle = (Date.now() - start) * speed,
transform = function(d) { return "rotate(" + angle * d.direction + ")"; };
frame.selectAll("path").attr("transform", transform);
frame.attr("transform", transform);