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
53 lines (52 loc) • 1.6 kB
JavaScript
import AffineTransformation from './AffineTransformation'
import Matrix from '../../math/Matrix'
export default class AffineTransformationBuilder {
constructor() {
AffineTransformationBuilder.constructor_.apply(this, arguments)
}
static constructor_() {
this._src0 = null
this._src1 = null
this._src2 = null
this._dest0 = null
this._dest1 = null
this._dest2 = null
this._m00 = null
this._m01 = null
this._m02 = null
this._m10 = null
this._m11 = null
this._m12 = null
const src0 = arguments[0], src1 = arguments[1], src2 = arguments[2], dest0 = arguments[3], dest1 = arguments[4], dest2 = arguments[5]
this._src0 = src0
this._src1 = src1
this._src2 = src2
this._dest0 = dest0
this._dest1 = dest1
this._dest2 = dest2
}
solve(b) {
const a = [[this._src0.x, this._src0.y, 1], [this._src1.x, this._src1.y, 1], [this._src2.x, this._src2.y, 1]]
return Matrix.solve(a, b)
}
compute() {
const bx = [this._dest0.x, this._dest1.x, this._dest2.x]
const row0 = this.solve(bx)
if (row0 === null) return false
this._m00 = row0[0]
this._m01 = row0[1]
this._m02 = row0[2]
const by = [this._dest0.y, this._dest1.y, this._dest2.y]
const row1 = this.solve(by)
if (row1 === null) return false
this._m10 = row1[0]
this._m11 = row1[1]
this._m12 = row1[2]
return true
}
getTransformation() {
const isSolvable = this.compute()
if (isSolvable) return new AffineTransformation(this._m00, this._m01, this._m02, this._m10, this._m11, this._m12)
return null
}
}