fresenham
Version:
Bresenham line drawing algorithm variation with a step parameter for floats compatibility
67 lines (46 loc) • 1.98 kB
Markdown
[](https://www.typescriptlang.org/)
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;
//...
});
```
To run test, clone the repository and in project do the following commands
```sh
npm install
npm test
```
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).