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.
52 lines
1.6 KiB
52 lines
1.6 KiB
var lerp = require('gl-vec3/lerp')
|
|
|
|
var recompose = require('mat4-recompose')
|
|
var decompose = require('mat4-decompose')
|
|
var determinant = require('gl-mat4/determinant')
|
|
var slerp = require('quat-slerp')
|
|
|
|
var state0 = state()
|
|
var state1 = state()
|
|
var tmp = state()
|
|
|
|
module.exports = interpolate
|
|
function interpolate(out, start, end, alpha) {
|
|
if (determinant(start) === 0 || determinant(end) === 0)
|
|
return false
|
|
|
|
//decompose the start and end matrices into individual components
|
|
var r0 = decompose(start, state0.translate, state0.scale, state0.skew, state0.perspective, state0.quaternion)
|
|
var r1 = decompose(end, state1.translate, state1.scale, state1.skew, state1.perspective, state1.quaternion)
|
|
if (!r0 || !r1)
|
|
return false
|
|
|
|
|
|
//now lerp/slerp the start and end components into a temporary lerp(tmptranslate, state0.translate, state1.translate, alpha)
|
|
lerp(tmp.translate, state0.translate, state1.translate, alpha)
|
|
lerp(tmp.skew, state0.skew, state1.skew, alpha)
|
|
lerp(tmp.scale, state0.scale, state1.scale, alpha)
|
|
lerp(tmp.perspective, state0.perspective, state1.perspective, alpha)
|
|
slerp(tmp.quaternion, state0.quaternion, state1.quaternion, alpha)
|
|
|
|
//and recompose into our 'out' matrix
|
|
recompose(out, tmp.translate, tmp.scale, tmp.skew, tmp.perspective, tmp.quaternion)
|
|
return true
|
|
}
|
|
|
|
function state() {
|
|
return {
|
|
translate: vec3(),
|
|
scale: vec3(1),
|
|
skew: vec3(),
|
|
perspective: vec4(),
|
|
quaternion: vec4()
|
|
}
|
|
}
|
|
|
|
function vec3(n) {
|
|
return [n||0,n||0,n||0]
|
|
}
|
|
|
|
function vec4() {
|
|
return [0,0,0,1]
|
|
} |