Skip to content

Instantly share code, notes, and snippets.

@arindas
Last active February 4, 2020 07:35
Show Gist options
  • Select an option

  • Save arindas/3b1f7d4d14037209e9d3815fee0612cf to your computer and use it in GitHub Desktop.

Select an option

Save arindas/3b1f7d4d14037209e9d3815fee0612cf to your computer and use it in GitHub Desktop.
Implementaion of Bresenham Line drawing algorithm in p5.js
function setup() {
createCanvas(400, 400);
}
function drawLine(x0, y0, x1, y1, freq) {
var dx = abs(x1 - x0);
var sx = x0 < x1? 1: -1;
var dy = -abs(y1 - y0)
var sy = y0 < y1? 1: -1
var err = dx + dy
var i = 0;
while(true) {
if(freq(i++)){
point(x0, y0)
}
if (x0 == x1 && y0 == y1)
break;
var e2 = 2 * err;
if (e2 >= dy) {
err += dy; /* e_xy + e_x > 0 */
x0 += sx;
}
if (e2 <= dx) { /* e_xy + e_y < 0 */
err += dx;
y0 += sy;
}
}
}
function dotfreq(freq) {
return function(i) {
return i % freq == 0;
}
}
function dashedfreq (a, b) {
}
function draw() {
background(220);
drawLine(80, 0, 100, 100, dotfreq(1))
drawLine(0, 100, 100, 100, dotfreq(1))
drawLine(300, 80, 200, 100, dotfreq(2))
drawLine(200, 0, 200, 100, dotfreq(1))
drawLine(100, 200, 0, 220, dotfreq(3))
drawLine(100, 200, 100, 300, dotfreq(1))
drawLine(200, 200, 220, 300, dotfreq(4))
drawLine(200, 200, 300, 200, dotfreq(1))
drawLine(10, 310, 60, 310, dotfreq(1))
drawLine(10, 360, 60, 360, dotfreq(1))
drawLine(10, 310, 10, 360, dotfreq(1))
drawLine(60, 310, 60, 360, dotfreq(1))
drawLine(70+10, 310, 90+60, 310, dotfreq(1))
drawLine(70+10, 360, 90+60, 360, dotfreq(1))
drawLine(70+10, 310, 70+10, 360, dotfreq(1))
drawLine(90+60, 310, 90+60, 360, dotfreq(1))
drawLine(100+70+10, 360, 100+90+60, 360, dotfreq(1))
drawLine(100+70+10, 310, 100+70+10, 360, dotfreq(1))
drawLine(100+70+10, 310, 100+90+60, 360, dotfreq(1))
}
// https://imgur.com/a/37TBAnf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment