Skip to content

Commit db6f9e7

Browse files
committed
more optimization for invert and 2d case
1 parent 9068017 commit db6f9e7

File tree

3 files changed

+7
-37
lines changed

3 files changed

+7
-37
lines changed

package-lock.json

-15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
"gl-heatmap2d": "^1.0.6",
8181
"gl-line3d": "1.2.1",
8282
"gl-mat4": "^1.2.0",
83-
"gl-matrix-invert": "^1.0.0",
8483
"gl-mesh3d": "^2.3.1",
8584
"gl-plot2d": "^1.4.5",
8685
"gl-plot3d": "^2.4.6",

src/traces/surface/convert.js

+7-21
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
var createSurface = require('gl-surface3d');
1313

1414
var ndarray = require('ndarray');
15-
var invert = require('gl-matrix-invert');
1615
var ndarrayInterp2d = require('ndarray-linear-interpolate').d2;
1716

1817
var interp2d = require('../heatmap/interp2d');
@@ -324,22 +323,9 @@ proto.estimateScale = function(resSrc, axis) {
324323
// see https://github.com/scijs/ndarray-homography
325324

326325
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;
343329
return out;
344330
}
345331

@@ -378,11 +364,11 @@ proto.refineCoords = function(coords) {
378364
var padWidth = 1 + width + 1;
379365
var padHeight = 1 + height + 1;
380366
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,
384370
0, 0, 1
385-
]);
371+
];
386372

387373
for(var i = 0; i < coords.length; ++i) {
388374
this.surface.padField(padImg, coords[i]);

0 commit comments

Comments
 (0)