Finds a piecewise-linear isocontour on a simplicial complex using the marching simplex method.
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
})
npm install simplicial-complex-contour
Computes a piecewise linear solution to the solution values=levels
cells
is an array of simplices represented by tuples of vertex indicesvalues
is an array of values defined at each vertex of the cell complexlevel
is the level at which the surface is extracted (Default 0)
Returns An object with 3 properties
cells
which are the cells of the extracted isosurfacevertexIds
which is an array of pairs of vertex ids encoding the crossing edgesvertexWeights
which are linear weights applied to each vertex
(c) 2014 Mikola Lysenko. MIT License