StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
42 lines
881 B
42 lines
881 B
'use strict'
|
|
|
|
module.exports = solveIntersection
|
|
|
|
var ratMul = require('big-rat/mul')
|
|
var ratDiv = require('big-rat/div')
|
|
var ratSub = require('big-rat/sub')
|
|
var ratSign = require('big-rat/sign')
|
|
var rvSub = require('rat-vec/sub')
|
|
var rvAdd = require('rat-vec/add')
|
|
var rvMuls = require('rat-vec/muls')
|
|
|
|
function ratPerp (a, b) {
|
|
return ratSub(ratMul(a[0], b[1]), ratMul(a[1], b[0]))
|
|
}
|
|
|
|
// Solve for intersection
|
|
// x = a + t (b-a)
|
|
// (x - c) ^ (d-c) = 0
|
|
// (t * (b-a) + (a-c) ) ^ (d-c) = 0
|
|
// t * (b-a)^(d-c) = (d-c)^(a-c)
|
|
// t = (d-c)^(a-c) / (b-a)^(d-c)
|
|
|
|
function solveIntersection (a, b, c, d) {
|
|
var ba = rvSub(b, a)
|
|
var dc = rvSub(d, c)
|
|
|
|
var baXdc = ratPerp(ba, dc)
|
|
|
|
if (ratSign(baXdc) === 0) {
|
|
return null
|
|
}
|
|
|
|
var ac = rvSub(a, c)
|
|
var dcXac = ratPerp(dc, ac)
|
|
|
|
var t = ratDiv(dcXac, baXdc)
|
|
var s = rvMuls(ba, t)
|
|
var r = rvAdd(a, s)
|
|
|
|
return r
|
|
}
|
|
|