2.0.1 • Published 12 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-graphAPI
require("simplify-planar-graph")(edges, positions, tolerance)
Simplies a planar graph to a given tolerance
edgesare the edges of the graph represented by pairs of vertex indicespositionsis a list of vertex coordinates encoded as an array of 2D arraystolerancecontrols the target aspect ratio of the corners of the mesh
Returns A new planar graph encoded as a JSON object with two properties:
edgesis an array of edges encoded as pairs of indicespositionsis 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