Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mattdesl/polyline-normals
gets miter normals for a 2D polyline
https://github.com/mattdesl/polyline-normals
Last synced: 19 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 (about 10 years ago)
- Default Branch: master
- Last Pushed: 2023-11-27T04:31:01.000Z (about 1 year ago)
- Last Synced: 2024-11-14T08:36:53.978Z (28 days ago)
- Language: JavaScript
- Homepage:
- Size: 176 KB
- Stars: 132
- Watchers: 6
- 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
[![stable](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges)
![img](http://i.imgur.com/UP2Fq12.png)
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
[![NPM](https://nodei.co/npm/polyline-normals.png)](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.