UNPKG

affine-complement

Version:

Finds a basis for the affine complement of a set of points

42 lines (38 loc) 812 B
'use strict' module.exports = affineComplement var orient = require('robust-orientation') function momentCurve(r, t, d) { for(var i=0; i<d; ++i) { r[i] = Math.pow(t, i+1) } return r } function affineComplement(d, pts) { var cod = pts.length if(cod === d+1) { if(orient.apply(void 0, pts) === 0) { return null } return [] } else if(cod > d+1) { return null } var frame = new Array(d+1) var t = 1.0 for(var i=0; i<cod; ++i) { frame[i] = pts[i] } for(var i=cod; i<=d; ++i) { frame[i] = momentCurve(new Array(d), t++, d) } var ptr = 0 for(var i=0; i<=d; ++i) { var o = orient.apply(void 0, frame) if(o !== 0) { return frame.slice(cod) } momentCurve(frame[ptr+cod], t++, d) ptr = (ptr + 1) % (d+1-cod) } return null }