Skip to content

Bresenham line drawing algorithm variation with a step parameter for float compatibility

License

Notifications You must be signed in to change notification settings

guidouil/fresenham

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

typescript

Fresenham

This Node.js library (support TypeScript) will calculate a variation of Bresenham's line algorithm for 2 points that can have float values for x and y. You have to pass the extra step (pixel width) parameter in this case. You can also set the step to a large integer like 25 to accommodate to a specific width of axes.

npm install fresenham

This module covers all the possible scenarios of a line

  • Vertical lines
  • Horizontal lines
  • Dioganal lines
  • Lines where 1 > slope > 0
  • Lines with slope > 1
  • Lines with slope < 0

Usage

Method require 5 float (startX, startY, endX, endY, step) as parameters. It returns an array of objects {x, y}. If you ommit the step parameter, it will be setted to the default value of 1.

To get the coordinates of line from (0, 5.5) to (-1, 6) with a step of 0.25 use below code

import { drawLine } from "fresenham";
const linePoints = drawLine(0, 5.5, -1, 6, 0.25);

// OR

const fresenham = require("fresenham");
const linePoints = fresenham.drawLine(0, 5.5, -1, 6, 0.25);

The above code snippet returns array of objects as below

[
  { x: 0, y: 5.5 },
  { x: -0.25, y: 5.5 },
  { x: -0.5, y: 5.75 },
  { x: -0.75, y: 6 },
  { x: -1, y: 6 },
];

You can access each point using below code

linePoints.forEach((point) => {
  const { x, y } = point;
  //...
});

Testing

To run test, clone the repository and in project do the following commands

npm install
npm test

References

This bresenham variation was inspired by (copied from) the excellent work from Steve Johns.

About

Bresenham line drawing algorithm variation with a step parameter for float compatibility

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published