2.0.1 • Published 11 years ago
simplify-planar-graph v2.0.1
simplify-planar-graph
Simplifies a planar graph by removing small or nearly flat corners.
Example
var simplify = require("simplify-planar-graph")
//Create a circle
var positions = []
var edges = []
for(var i=0; i<100; ++i) {
var theta = i / 100 * Math.PI * 2.0
positions.push([Math.cos(theta), Math.sin(theta)])
edges.push([i, (i+1)%100])
}
//Simplify it
console.log(simplify(edges, positions, 0.1))
Output:
{ positions:
[ [ 0.9921147013144779, 0.12533323356430426 ],
[ 0.8090169943749475, 0.5877852522924731 ],
[ 0.48175367410171516, 0.8763066800438637 ],
[ -0.30901699437494734, 0.9510565162951536 ],
[ -0.7705132427757891, 0.6374239897486899 ],
[ -0.9980267284282716, 0.06279051952931358 ],
[ -0.9510565162951535, -0.30901699437494773 ],
[ -0.5877852522924732, -0.8090169943749473 ],
[ -0.18738131458572463, -0.9822872507286887 ],
[ 0.535826794978996, -0.8443279255020155 ],
[ 0.7705132427757894, -0.6374239897486896 ] ],
edges:
[ [ 0, 1 ],
[ 1, 2 ],
[ 2, 3 ],
[ 3, 4 ],
[ 4, 5 ],
[ 10, 0 ],
[ 5, 6 ],
[ 6, 7 ],
[ 7, 8 ],
[ 8, 9 ],
[ 9, 10 ] ] }
Install
npm install simplify-planar-graph
API
require("simplify-planar-graph")(edges, positions, tolerance)
Simplies a planar graph to a given tolerance
edges
are the edges of the graph represented by pairs of vertex indicespositions
is a list of vertex coordinates encoded as an array of 2D arraystolerance
controls the target aspect ratio of the corners of the mesh
Returns A new planar graph encoded as a JSON object with two properties:
edges
is an array of edges encoded as pairs of indicespositions
is an array of positions for the simplicial complex
Note The current implementation does not detect the removal of features which cross existing line segments. Picking a high tolerance value may result in destroying the planarity of the resulting graph. Eventually if it becomes a priority I may go back and implement code to detect and handle these cases.
Credits
(c) 2014 Mikola Lysenko. MIT License