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.
95 lines
1.6 KiB
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]
|
||
|
}
|