efront 3.15.6 → 3.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,9 +32,9 @@
32
32
  // end
33
33
  // end
34
34
  "use strict";
35
-
36
35
  var notMatchLength = new Error("矩阵长度不一致");
37
- function transform(dots, B) {
36
+
37
+ function transform(B, dots) {
38
38
  var dimention = Math.sqrt(B.length - 1) | 0;
39
39
  if (dots.length % dimention !== 0) throw notMatchLength;
40
40
  if (dots === B) B = B.slice(0);
@@ -43,10 +43,11 @@ function transform(dots, B) {
43
43
  for (var cx = 0, dx = dots.length; cx < dx; cx += dimention) {
44
44
  for (var cy = 0, dy = dimention; cy < dy; cy++) {
45
45
  var sum = 0;
46
+ var start = dim2 * cy;
46
47
  for (var ct = 0, dt = dimention; ct < dt; ct++) {
47
- sum += ds[cx + ct] * B[ct * dim2 + cy];
48
+ sum += ds[cx + ct] * B[start + ct];
48
49
  }
49
- sum += B[dimention * dim2 + cy];
50
+ sum += B[start + dimention];
50
51
  dots[cx + cy] = sum;
51
52
  }
52
53
  }
@@ -56,13 +57,12 @@ function transform(dots, B) {
56
57
  function translate(A, delta) {
57
58
  var [dim2, dim] = size(A);
58
59
  var inc = 0;
59
- for (var cx = dim * dim2, dx = cx + dim; cx < dx; cx++) {
60
+ for (var cx = dim, dx = dim * dim2; cx < dx; cx += dim2) {
60
61
  A[cx] = (A[cx] || 0) + delta[inc++];
61
62
  }
62
63
  return A;
63
64
  }
64
65
 
65
-
66
66
  function 负(a) {
67
67
  return -a;
68
68
  }
@@ -76,7 +76,7 @@ function multiply(A, B) {
76
76
  for (var cy = 0, dy = dim; cy < dy; cy++) {
77
77
  var sum = 0;
78
78
  for (var ct = 0, dt = dim; ct < dt; ct++) {
79
- sum += X[cx + ct] * B[ct * dim + cy];
79
+ sum += B[cx + ct] * X[ct * dim + cy];
80
80
  }
81
81
  A[cx + cy] = sum;
82
82
  }
@@ -132,15 +132,17 @@ function olinde(v, vector) {
132
132
  }
133
133
  return v;
134
134
  }
135
+
135
136
  function matrix2d(theta) {
136
137
  var cosa = Math.cos(theta);
137
138
  var sina = Math.sin(theta);
138
139
  return new Matrix(
139
- cosa, sina, 0,
140
- -sina, cosa, 0,
140
+ cosa, -sina, 0,
141
+ sina, cosa, 0,
141
142
  0, 0, 1
142
143
  );
143
- };
144
+ }
145
+
144
146
  function matrix3d(factor) {
145
147
  var theta = norm(factor);
146
148
  var vec = times(factor, 1 / theta);
@@ -150,9 +152,9 @@ function matrix3d(factor) {
150
152
  var [x_u, y_u, z_u] = factor ? [0, 0, 1] : vec;
151
153
 
152
154
  return new Matrix(
153
- cosa + x_u * x_u * vera, x_u * y_u * vera - z_u * sina, x_u * z_u * vera + y_u * sina, 0,
154
- x_u * y_u * vera + z_u * sina, cosa + y_u * y_u * vera, y_u * z_u * vera - x_u * sina, 0,
155
- x_u * z_u * vera - y_u * sina, y_u * z_u * vera + x_u * sina, cosa + z_u * z_u * vera, 0,
155
+ cosa + x_u * x_u * vera, x_u * y_u * vera + z_u * sina, x_u * z_u * vera - y_u * sina, 0,
156
+ x_u * y_u * vera - z_u * sina, cosa + y_u * y_u * vera, y_u * z_u * vera + x_u * sina, 0,
157
+ x_u * z_u * vera + y_u * sina, y_u * z_u * vera - x_u * sina, cosa + z_u * z_u * vera, 0,
156
158
  0, 0, 0, 1
157
159
  );
158
160
  }
@@ -173,42 +175,47 @@ var 逆 = function (A) {
173
175
  A.push.apply(A, E);
174
176
  for (var cx = 0, dx = dim; cx < dx; cx++) {
175
177
  var start = cx * dim + cx;
176
- for (var ct = start, dt = X.length; ct < dt; ct += dim) {
177
- if (X[ct] !== 0) break;
178
+ var max_ct, v = 0;
179
+ for (var ct = start, dt = cx * dim + dim; ct < dt; ct++) {
180
+ var v0 = Math.abs(X[ct]);
181
+ if (v0 > v) {
182
+ max_ct = ct;
183
+ v = v0;
184
+ }
178
185
  }
186
+ ct = max_ct;
179
187
  if (ct !== start) {
180
188
  var delta = ct - start;
181
- var ratio = 1 / X[ct];
182
- for (var cy = cx * dim, dy = cy + dim; cy < dy; cy++) {
189
+ var ratio = (1 - X[start]) / X[ct];
190
+ for (var cy = cx, dy = X.length; cy < dy; cy += dim) {
183
191
  X[cy] += X[cy + delta] * ratio;
184
192
  A[cy] += A[cy + delta] * ratio;
185
193
  }
186
194
  }
187
195
  if (X[start] !== 1) {
188
- var delta = ct - start;
189
196
  var ratio = 1 / X[start];
190
- for (var cy = cx * dim, dy = cy + dim; cy < dy; cy++) {
197
+ for (var cy = cx, dy = X.length; cy < dy; cy += dim) {
191
198
  X[cy] *= ratio;
192
199
  A[cy] *= ratio;
193
200
  }
194
201
  }
195
- for (var ct = start + dim, dt = X.length; ct < dt; ct += dim) {
202
+ for (var ct = start + 1, dt = start + dim - cx; ct < dt; ct++) {
196
203
  if (X[ct] === 0) continue;
197
204
  var ratio = -X[ct];
198
205
  var delta = start - ct;
199
- for (var cy = ct - cx, dy = cy + dim; cy < dy; cy++) {
206
+ for (var cy = cx + ct - start, dy = X.length; cy < dy; cy += dim) {
200
207
  X[cy] += X[cy + delta] * ratio;
201
208
  A[cy] += A[cy + delta] * ratio;
202
209
  }
203
210
  }
204
211
  }
205
- for (var cx = dim - 2; cx >= 0; cx--) {
206
- var start = cx * dim + cx + 1;
207
- for (var ct = start; ct >= 0; ct -= dim) {
212
+ for (var cx = dim - 1; cx >= 0; cx--) {
213
+ var start = cx * dim + cx;
214
+ for (var ct = start - 1, dt = start - cx; ct >= dt; ct--) {
208
215
  if (X[ct] === 0) continue;
209
216
  var ratio = -X[ct];
210
- var delta = dim + start - ct;
211
- for (var cy = cx * dim, dy = cy + dim; cy < dy; cy++) {
217
+ var delta = start - ct;
218
+ for (var cy = cx + ct - start, dy = X.length; cy < dy; cy += dim) {
212
219
  X[cy] += X[cy + delta] * ratio;
213
220
  A[cy] += A[cy + delta] * ratio;
214
221
  }
@@ -245,6 +252,19 @@ class Matrix extends Array {
245
252
  if (this._invert) return this._invert;
246
253
  return this._invert = this.slice().inverse();
247
254
  }
255
+ transpose() {
256
+ var [size] = this.size();
257
+ for (var cx = 0, dx = size; cx < dx; cx++) {
258
+ for (var cy = cx + 1, dy = dx; cy < dy; cy++) {
259
+ var i = cx * size + cy;
260
+ var j = cy * size + cx;
261
+ var tmp = this[i];
262
+ this[i] = this[j];
263
+ this[j] = tmp;
264
+ }
265
+ }
266
+ return this;
267
+ }
248
268
  inverse() {
249
269
  this.dirty();
250
270
  return 逆(this);
@@ -276,8 +296,11 @@ class Matrix extends Array {
276
296
  return multiply(this, a);
277
297
  }
278
298
  transform(dots) {
279
- if (dots instanceof Array) return transform(dots, this);
280
- if (isFinite(dots)) return dots * this[this.length - 1];
299
+ if (dots instanceof Array) return transform(this, dots);
300
+ if (arguments.length > 1) {
301
+ var a = Array.prototype.slice.apply(arguments, 0);
302
+ return transform(this, a);
303
+ }
281
304
  return dots;
282
305
  }
283
306
  }
@@ -585,7 +585,7 @@ var emiters = {
585
585
  emiters.v = emiters.ng = emiters.on;
586
586
 
587
587
  function getFromScopes(key, scope, parentScopes) {
588
- if (key in scope) {
588
+ if (scope) if (key in scope) {
589
589
  return scope[key];
590
590
  }
591
591
  if (parentScopes) for (var cx = parentScopes.length - 1; cx >= 0; cx--) {
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.15.6",
3
+ "version": "3.15.7",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {