Skip to content

Instantly share code, notes, and snippets.

@markvital
Created November 8, 2016 02:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markvital/78ac9c99a92baa202afd06fbe92f23ce to your computer and use it in GitHub Desktop.
Save markvital/78ac9c99a92baa202afd06fbe92f23ce to your computer and use it in GitHub Desktop.
Points Along an Archimedean Spiral
license: mit
svg {
background: white;
}
.spiral {
fill: none;
stroke: #303030;
stroke-width: 3px;
}
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Points Along an Archimedean Spiral" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript" src="http://d3js.org/d3.v2.js"></script>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
var width = 960,
height = 500;
var centerX = width/2,
centerY = height/2,
radius = 200,
sides = 50,
coils = 2,
rotation = 0;
// How far to step away from center for each side.
var awayStep = radius/sides;
// How far to rotate around center for each side.
var aroundStep = coils/sides;// 0 to 1 based.
// Convert aroundStep to radians.
var aroundRadians = aroundStep * 2 * Math.PI;
// Convert rotation to radians.
rotation *= 2 * Math.PI;
var new_time = [];
// For every side, step around and away from center.
for(var i=1; i<=sides; i++){
// How far away from center
var away = i * (awayStep+10);
// How far around the center.
var around = i * aroundRadians + rotation;
// Convert 'around' and 'away' to X and Y.
var x = centerX + Math.cos(around) * away;
var y = centerY + Math.sin(around) * away;
new_time.push({x: x, y: y});
}
console.log(new_time);
var svg = d3.select("#chart").append("svg")
.attr("width", width)
.attr("height", height)
.append("g");
var lineFunction = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("cardinal");
svg.append("path")
.attr("d", lineFunction(new_time))
.attr("stroke", "gray")
.attr("stroke-width", 0.5)
.attr("fill", "none");
var circles = svg.selectAll("circle")
.data(new_time)
.enter()
.append("circle")
.attr("cx", function (d) { return d.x; })
.attr("cy", function (d) { return d.y; })
.attr("r", 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment