|
12 | 12 | var createSurface = require('gl-surface3d');
|
13 | 13 |
|
14 | 14 | var ndarray = require('ndarray');
|
15 |
| -var invert = require('gl-matrix-invert'); |
16 | 15 | var ndarrayInterp2d = require('ndarray-linear-interpolate').d2;
|
17 | 16 |
|
18 | 17 | var interp2d = require('../heatmap/interp2d');
|
@@ -324,22 +323,9 @@ proto.estimateScale = function(resSrc, axis) {
|
324 | 323 | // see https://github.com/scijs/ndarray-homography
|
325 | 324 |
|
326 | 325 | function fnHomography(out, inp, X) {
|
327 |
| - var n = 2; // we only use 2 dimensions here |
328 |
| - var i, j; |
329 |
| - for(i = 0; i < n; ++i) { |
330 |
| - out[i] = X[(n + 1) * n + i]; |
331 |
| - for(j = 0; j < n; ++j) { |
332 |
| - out[i] += X[(n + 1) * j + i] * inp[j]; |
333 |
| - } |
334 |
| - } |
335 |
| - var w = X[(n + 1) * (n + 1) - 1]; |
336 |
| - for(j = 0; j < n; ++j) { |
337 |
| - w += X[(n + 1) * j + n] * inp[j]; |
338 |
| - } |
339 |
| - var wr = 1 / w; |
340 |
| - for(i = 0; i < n; ++i) { |
341 |
| - out[i] *= wr; |
342 |
| - } |
| 326 | + var w = X[8] + X[2] * inp[0] + X[5] * inp[1]; |
| 327 | + out[0] = (X[6] + X[0] * inp[0] + X[3] * inp[1]) / w; |
| 328 | + out[1] = (X[7] + X[1] * inp[0] + X[4] * inp[1]) / w; |
343 | 329 | return out;
|
344 | 330 | }
|
345 | 331 |
|
@@ -378,11 +364,11 @@ proto.refineCoords = function(coords) {
|
378 | 364 | var padWidth = 1 + width + 1;
|
379 | 365 | var padHeight = 1 + height + 1;
|
380 | 366 | var padImg = ndarray(new Float32Array(padWidth * padHeight), [padWidth, padHeight]);
|
381 |
| - var X = invert([], [ |
382 |
| - scaleW, 0, 0, |
383 |
| - 0, scaleH, 0, |
| 367 | + var X = [ |
| 368 | + 1 / scaleW, 0, 0, |
| 369 | + 0, 1 / scaleH, 0, |
384 | 370 | 0, 0, 1
|
385 |
| - ]); |
| 371 | + ]; |
386 | 372 |
|
387 | 373 | for(var i = 0; i < coords.length; ++i) {
|
388 | 374 | this.surface.padField(padImg, coords[i]);
|
|
0 commit comments