simplicial-complex-contour
Finds a piecewise-linear isocontour on a simplicial complex using the marching simplex method.
Example
var extractContour = require('simplicial-complex-contour')
var bunny = require('bunny')
//Solve for the curve z=0 on the surface of the bunny
var zvalues = bunny.positions.map(function(p) {
return p[2]
})
var curve = extractContour(bunny.cells, zvalues, 0.0)
//Unpack edges and positions of curve
var curveEdges = curve.cells
var curvePositions = curve.vertexWeights.map(function(w,i) {
var a = bunny.positions[curve.vertexIds[i][0]]
var b = bunny.positions[curve.vertexIds[i][1]]
return [
w * a[0] + (1 - w) * b[0],
w * a[1] + (1 - w) * b[1],
w * a[2] + (1 - w) * b[2]
]
})
//Render the curve
console.log({
cells: curveEdges,
positions: curvePositions
})
Install
npm install simplicial-complex-contour
API
require('simplicial-complex-contour')(cells, values[, level])
Computes a piecewise linear solution to the solution values=levels
cellsis an array of simplices represented by tuples of vertex indicesvaluesis an array of values defined at each vertex of the cell complexlevelis the level at which the surface is extracted (Default 0)
Returns An object with 3 properties
cellswhich are the cells of the extracted isosurfacevertexIdswhich is an array of pairs of vertex ids encoding the crossing edgesvertexWeightswhich are linear weights applied to each vertex
Credits
(c) 2014 Mikola Lysenko. MIT License