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/mat4-interpolate/index.js

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]
}