UNPKG

node-red-contrib-tak-registration

Version:

A Node-RED node to register to TAK and to help wrap files as datapackages to send to TAK

203 lines (202 loc) 3.81 kB
export default class RobustDeterminant { interfaces_ () { return [] } getClass () { return RobustDeterminant } static orientationIndex (p1, p2, q) { const dx1 = p2.x - p1.x const dy1 = p2.y - p1.y const dx2 = q.x - p2.x const dy2 = q.y - p2.y return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2) } static signOfDet2x2 (x1, y1, x2, y2) { let sign = null let swap = null let k = null let count = 0 sign = 1 if (x1 === 0.0 || y2 === 0.0) { if (y1 === 0.0 || x2 === 0.0) { return 0 } else if (y1 > 0) { if (x2 > 0) { return -sign } else { return sign } } else { if (x2 > 0) { return sign } else { return -sign } } } if (y1 === 0.0 || x2 === 0.0) { if (y2 > 0) { if (x1 > 0) { return sign } else { return -sign } } else { if (x1 > 0) { return -sign } else { return sign } } } if (y1 > 0.0) { if (y2 > 0.0) { if (y1 <= y2) { ; } else { sign = -sign swap = x1 x1 = x2 x2 = swap swap = y1 y1 = y2 y2 = swap } } else { if (y1 <= -y2) { sign = -sign x2 = -x2 y2 = -y2 } else { swap = x1 x1 = -x2 x2 = swap swap = y1 y1 = -y2 y2 = swap } } } else { if (y2 > 0.0) { if (-y1 <= y2) { sign = -sign x1 = -x1 y1 = -y1 } else { swap = -x1 x1 = x2 x2 = swap swap = -y1 y1 = y2 y2 = swap } } else { if (y1 >= y2) { x1 = -x1 y1 = -y1 x2 = -x2 y2 = -y2 } else { sign = -sign swap = -x1 x1 = -x2 x2 = swap swap = -y1 y1 = -y2 y2 = swap } } } if (x1 > 0.0) { if (x2 > 0.0) { if (x1 <= x2) { ; } else { return sign } } else { return sign } } else { if (x2 > 0.0) { return -sign } else { if (x1 >= x2) { sign = -sign x1 = -x1 x2 = -x2 } else { return -sign } } } while (true) { count = count + 1 k = Math.floor(x2 / x1) x2 = x2 - k * x1 y2 = y2 - k * y1 if (y2 < 0.0) { return -sign } if (y2 > y1) { return sign } if (x1 > x2 + x2) { if (y1 < y2 + y2) { return sign } } else { if (y1 > y2 + y2) { return -sign } else { x2 = x1 - x2 y2 = y1 - y2 sign = -sign } } if (y2 === 0.0) { if (x2 === 0.0) { return 0 } else { return -sign } } if (x2 === 0.0) { return sign } k = Math.floor(x1 / x2) x1 = x1 - k * x2 y1 = y1 - k * y2 if (y1 < 0.0) { return sign } if (y1 > y2) { return -sign } if (x2 > x1 + x1) { if (y2 < y1 + y1) { return -sign } } else { if (y2 > y1 + y1) { return sign } else { x1 = x2 - x1 y1 = y2 - y1 sign = -sign } } if (y1 === 0.0) { if (x1 === 0.0) { return 0 } else { return sign } } if (x1 === 0.0) { return -sign } } } }