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/slab-decomposition/lib/order-segments.js

95 lines
1.6 KiB

4 years ago
"use strict"
module.exports = orderSegments
var orient = require("robust-orientation")
function horizontalOrder(a, b) {
var bl, br
if(b[0][0] < b[1][0]) {
bl = b[0]
br = b[1]
} else if(b[0][0] > b[1][0]) {
bl = b[1]
br = b[0]
} else {
var alo = Math.min(a[0][1], a[1][1])
var ahi = Math.max(a[0][1], a[1][1])
var blo = Math.min(b[0][1], b[1][1])
var bhi = Math.max(b[0][1], b[1][1])
if(ahi < blo) {
return ahi - blo
}
if(alo > bhi) {
return alo - bhi
}
return ahi - bhi
}
var al, ar
if(a[0][1] < a[1][1]) {
al = a[0]
ar = a[1]
} else {
al = a[1]
ar = a[0]
}
var d = orient(br, bl, al)
if(d) {
return d
}
d = orient(br, bl, ar)
if(d) {
return d
}
return ar - br
}
function orderSegments(b, a) {
var al, ar
if(a[0][0] < a[1][0]) {
al = a[0]
ar = a[1]
} else if(a[0][0] > a[1][0]) {
al = a[1]
ar = a[0]
} else {
return horizontalOrder(a, b)
}
var bl, br
if(b[0][0] < b[1][0]) {
bl = b[0]
br = b[1]
} else if(b[0][0] > b[1][0]) {
bl = b[1]
br = b[0]
} else {
return -horizontalOrder(b, a)
}
var d1 = orient(al, ar, br)
var d2 = orient(al, ar, bl)
if(d1 < 0) {
if(d2 <= 0) {
return d1
}
} else if(d1 > 0) {
if(d2 >= 0) {
return d1
}
} else if(d2) {
return d2
}
d1 = orient(br, bl, ar)
d2 = orient(br, bl, al)
if(d1 < 0) {
if(d2 <= 0) {
return d1
}
} else if(d1 > 0) {
if(d2 >= 0) {
return d1
}
} else if(d2) {
return d2
}
return ar[0] - br[0]
}