(points, includePointAtInfinity)
| 9995 | } |
| 9996 | |
| 9997 | function triangulate(points, includePointAtInfinity) { |
| 9998 | var n = points.length |
| 9999 | if(n === 0) { |
| 10000 | return [] |
| 10001 | } |
| 10002 | |
| 10003 | var d = points[0].length |
| 10004 | if(d < 1) { |
| 10005 | return [] |
| 10006 | } |
| 10007 | |
| 10008 | //Special case: For 1D we can just sort the points |
| 10009 | if(d === 1) { |
| 10010 | return triangulate1D(n, points, includePointAtInfinity) |
| 10011 | } |
| 10012 | |
| 10013 | //Lift points, sort |
| 10014 | var lifted = new Array(n) |
| 10015 | var upper = 1.0 |
| 10016 | for(var i=0; i<n; ++i) { |
| 10017 | var p = points[i] |
| 10018 | var x = new Array(d+1) |
| 10019 | var l = 0.0 |
| 10020 | for(var j=0; j<d; ++j) { |
| 10021 | var v = p[j] |
| 10022 | x[j] = v |
| 10023 | l += v * v |
| 10024 | } |
| 10025 | x[d] = l |
| 10026 | lifted[i] = new LiftedPoint(x, i) |
| 10027 | upper = Math.max(l, upper) |
| 10028 | } |
| 10029 | uniq(lifted, compareLifted) |
| 10030 | |
| 10031 | //Double points |
| 10032 | n = lifted.length |
| 10033 | |
| 10034 | //Create new list of points |
| 10035 | var dpoints = new Array(n + d + 1) |
| 10036 | var dindex = new Array(n + d + 1) |
| 10037 | |
| 10038 | //Add steiner points at top |
| 10039 | var u = (d+1) * (d+1) * upper |
| 10040 | var y = new Array(d+1) |
| 10041 | for(var i=0; i<=d; ++i) { |
| 10042 | y[i] = 0.0 |
| 10043 | } |
| 10044 | y[d] = u |
| 10045 | |
| 10046 | dpoints[0] = y.slice() |
| 10047 | dindex[0] = -1 |
| 10048 | |
| 10049 | for(var i=0; i<=d; ++i) { |
| 10050 | var x = y.slice() |
| 10051 | x[i] = 1 |
| 10052 | dpoints[i+1] = x |
| 10053 | dindex[i+1] = -1 |
| 10054 | } |
no test coverage detected
searching dependent graphs…