StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
StackGenVis/frontend/node_modules/monotone-convex-hull-2d/index.js

81 lines
1.5 KiB

'use strict'
module.exports = monotoneConvexHull2D
var orient = require('robust-orientation')[3]
function monotoneConvexHull2D(points) {
var n = points.length
if(n < 3) {
var result = new Array(n)
for(var i=0; i<n; ++i) {
result[i] = i
}
if(n === 2 &&
points[0][0] === points[1][0] &&
points[0][1] === points[1][1]) {
return [0]
}
return result
}
//Sort point indices along x-axis
var sorted = new Array(n)
for(var i=0; i<n; ++i) {
sorted[i] = i
}
sorted.sort(function(a,b) {
var d = points[a][0]-points[b][0]
if(d) {
return d
}
return points[a][1] - points[b][1]
})
//Construct upper and lower hulls
var lower = [sorted[0], sorted[1]]
var upper = [sorted[0], sorted[1]]
for(var i=2; i<n; ++i) {
var idx = sorted[i]
var p = points[idx]
//Insert into lower list
var m = lower.length
while(m > 1 && orient(
points[lower[m-2]],
points[lower[m-1]],
p) <= 0) {
m -= 1
lower.pop()
}
lower.push(idx)
//Insert into upper list
m = upper.length
while(m > 1 && orient(
points[upper[m-2]],
points[upper[m-1]],
p) >= 0) {
m -= 1
upper.pop()
}
upper.push(idx)
}
//Merge lists together
var result = new Array(upper.length + lower.length - 2)
var ptr = 0
for(var i=0, nl=lower.length; i<nl; ++i) {
result[ptr++] = lower[i]
}
for(var j=upper.length-2; j>0; --j) {
result[ptr++] = upper[j]
}
//Return result
return result
}