UNPKG

fresenham

Version:

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

67 lines (46 loc) 1.98 kB
[![typescript](https://camo.githubusercontent.com/56e4a1d9c38168bd7b1520246d6ee084ab9abbbb/68747470733a2f2f62616467656e2e6e65742f62616467652f69636f6e2f547970655363726970743f69636f6e3d74797065736372697074266c6162656c266c6162656c436f6c6f723d626c756526636f6c6f723d353535353535)](https://www.typescriptlang.org/) # 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 1 use below code ```js 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 ```js [ { 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 ```js linePoints.forEach((point) => { const { x, y } = point; //... }); ``` ## Testing To run test, clone the repository and in project do the following commands ```sh npm install npm test ``` ## References This bresenham variation was inspired by (copied from) the excellent work from [Steve Johns](https://www.middle-engine.com/blog/posts/2020/07/28/bresenhams-line-algorithm).