https://github.com/mattdesl/polyline-normals
gets miter normals for a 2D polyline
https://github.com/mattdesl/polyline-normals
Last synced: 10 days ago
JSON representation
gets miter normals for a 2D polyline
- Host: GitHub
- URL: https://github.com/mattdesl/polyline-normals
- Owner: mattdesl
- License: mit
- Created: 2014-11-28T02:47:38.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-11-27T04:31:01.000Z (over 1 year ago)
- Last Synced: 2025-03-29T07:50:34.063Z (17 days ago)
- Language: JavaScript
- Homepage:
- Size: 176 KB
- Stars: 136
- Watchers: 5
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome - polyline-normals - gets miter normals for a 2D polyline (etc)
- awesome - polyline-normals - gets miter normals for a 2D polyline (etc)
README
# polyline-normals
[](http://github.com/badges/stability-badges)

Computes the normals of a polyline, using miter joins where multiple segments meet. This is mainly useful to expand thick lines in a vertex shader on the GPU.
```js
var getNormals = require('polyline-normals')//a triangle
var path = [ [0, 122], [0, 190], [90, 190] ]//get the normals as a closed loop
var normals = getNormals(path, true)//now draw our thick line in 2D/3D/etc
```See [the 2d test](test-2d.js) for an example of how these lines would be extruded.
For more complex line joins and end caps, see [extrude-polyline](https://nodei.co/npm/extrude-polyline/) (which builds an indexed mesh).
## Shader Example
For an example of how to use this within a shader, see [three-line-2d](https://nodei.co/npm/three-line-2d/).
## Usage
[](https://nodei.co/npm/polyline-normals/)
#### `normals(path[, closed])`
For the given path, produces a new array of the same length with normal information for each point. The data contains a normal, `[nx, ny]` and the length of the miter (default to 1.0 where no join occurs).
```js
[
[ [nx, ny], miterLength ],
[ [nx, ny], miterLength ]
]
```If `closed` is true, it assumes a segment will be drawn from the last point to the first point, and adjusts those normals accordingly.
## License
MIT, see [LICENSE.md](http://github.com/mattdesl/polyline-normals/blob/master/LICENSE.md) for details.