Skip to content

Instantly share code, notes, and snippets.

@simudream
Created November 27, 2014 00:35
Show Gist options
  • Save simudream/cfcdd47fe97a9c7633d2 to your computer and use it in GitHub Desktop.
Save simudream/cfcdd47fe97a9c7633d2 to your computer and use it in GitHub Desktop.
Spiral art using recursive circles
<canvas id="canvas" width="1600" height="1600"></canvas>
<p>Degree Change
<input type="range" id="degreeInput" min="-40.01" value="-25.57" max="40.01" step="0.01"/> <span id="degreeLabel">-25.57</span>
</p>
<p>Radius Change
<input type="range" id="radiusInput" min="0.01" value="1" max="2" step="0.01"/><span id="radiusLabel">1</span>
</p>
<a href="http://www.mikedoesweb.com/2014/recursive-spiral-art-with-canvasjavascript/">View on mikedoesweb.com</a>
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.strokeStyle = '#000';
context.lineWidth = 1.5;
degreeIncrement = -25.57;
radiusIncrement = 1;
var stopDrawing = false;
var loop = 100;
var circle = function(x, y, r){
context.beginPath();
context.arc(x, y, r, 0, 2 * Math.PI, false);
context.fillStyle = 'rgba(0,102,255,0.01)';
context.fill();
context.closePath();
context.stroke();
};
var draw = function(x, y, r, d){
if(loop > 0 && !stopDrawing){
circle(x,y,r);
var x1 = x + (r * Math.cos(d / 180 * Math.PI));
var y1 = y + (r * Math.sin(d / 180 * Math.PI));
d += degreeIncrement;
r += radiusIncrement;
loop -= 1;
draw(x1,y1,r,d)
}
}
var start = function(){
loop = 1000;
context.clearRect ( 0 , 0 , canvas.width, canvas.height );
var x = canvas.width / 2;
var y = canvas.height / 2;
var radius = canvas.height / 2;
stopDrawing = false;
draw (x, y, 5, 0);
}
start();
document.getElementById("degreeInput").addEventListener("input", function(){
stopDrawing = true;
var newDegrees = parseFloat(this.value);
document.getElementById("degreeLabel").innerText = newDegrees;
degreeIncrement = newDegrees;
start()
},false);
document.getElementById("radiusInput").addEventListener("input", function(){
stopDrawing = true;
var newRadius = parseFloat(this.value);
document.getElementById("radiusLabel").innerText = newRadius;
radiusIncrement = newRadius;
start()
},false);
var loop = function(){
stopDrawing = true;
degreeIncrement += 0.01;
document.getElementById("degreeInput").value = degreeIncrement;
document.getElementById("degreeLabel").innerHTML = degreeIncrement;
start();
}
var animation;
var animate = function(time){
window.animation = window.setInterval(loop, 50)
}
animate(50);
#canvas{
border:1px solid #000;
width:800px;
height:800px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment