efront 3.14.0 → 3.14.9

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.
@@ -1,146 +0,0 @@
1
- // 空间变换算法
2
- // function [dots]=xrs(dots,wyh)
3
- // % 转动,缩放,平移,依次进行
4
- // % wyh.mid为变换中心
5
- // % wyh.ppt为转动轴的方向
6
- // % wyh.alph为转动角度
7
- // % wyh.scrl为缩放系数,反射可设轴向系数为-1
8
- // % wyh.drag为平移向量
9
- // wyh.alph=pi*wyh.alph/180;
10
- // if size(dots,2)==3
11
- // if numel(wyh.ppt) == 2
12
- // theta = pi*wyh.ppt(1)/180;
13
- // phi = pi*wyh.ppt(2)/180;
14
- // rot_u = [cos(phi)*cos(theta); cos(phi)*sin(theta); sin(phi)];
15
- // elseif numel(wyh.ppt) == 3
16
- // rot_u = wyh.ppt(:)/norm(wyh.ppt);
17
- // end
18
- // x_u = rot_u(1);
19
- // y_u = rot_u(2);
20
- // z_u = rot_u(3);
21
- // cosa = cos(wyh.alph);
22
- // sina = sin(wyh.alph);
23
- // vera = 1 - cosa;
24
- // rot = [cosa+x_u^2*vera x_u*y_u*vera-z_u*sina x_u*z_u*vera+y_u*sina; ...
25
- // x_u*y_u*vera+z_u*sina cosa+y_u^2*vera y_u*z_u*vera-x_u*sina; ...
26
- // x_u*z_u*vera-y_u*sina y_u*z_u*vera+x_u*sina cosa+z_u^2*vera]';
27
- // else
28
- // rot=[cos(wyh.alph),-sin(wyh.alph);sin(wyh.alph),cos(wyh.alph)];
29
- // end
30
- // for cx=1:size(dots,1)
31
- // dots(cx,:)=(dots(cx,:)-wyh.mid).*wyh.scrl*rot+wyh.mid+wyh.drag;
32
- // end
33
- // end
34
- var pi = Math.PI;
35
- var { cos, sin, sqrt } = Math;
36
- var norm = function (vector) {
37
- var [x, y, z] = vector;
38
- return sqrt(x * x + y * y + z * z);
39
- };
40
- var vectorDivide = function (vector, num) {
41
- var [x, y, z] = vector;
42
- return [x / num, y / num, z / num];
43
- };
44
- var vectorMinus = function (vector1, vector2) {
45
- var [x1, y1, z1] = vector1;
46
- var [x2, y2, z2] = vector2;
47
- return [x1 - x2, y1 - y2, z1 - z2];
48
- };
49
- var vectorPlus = function (vector1, vector2) {
50
- var [x1, y1, z1] = vector1;
51
- var [x2, y2, z2] = vector2;
52
- return [x1 + x2, y1 + y2, z1 + z2];
53
-
54
- }
55
- var crossMultiply = function (A, B) {
56
- var [xa, ya, za] = A;
57
- var [xb, yb, zb] = B;
58
- return [ya * zb - yb * za, za * xb - zb * xa, xa * yb - ya * xb];
59
- };
60
- var innerMultiply = function (A, B) {
61
- var [xa, ya, za] = A;
62
- var [xb, yb, zb] = B;
63
- return xa * xb + ya * yb + za * zb;
64
- };
65
- var vectorMultify = function (vector1, vector2) {
66
- var [x1, y1, z1] = vector1;
67
- var [x2, y2, z2] = vector2;
68
- return [x1 * x2, y1 * y2, z1 * z2];
69
- };
70
- var matrixMultify = function (A, B) {
71
- var [
72
- a11, a12, a13
73
- ] = A;
74
- var [
75
- [b11, b12, b13],
76
- [b21, b22, b23],
77
- [b31, b32, b33]
78
- ] = B;
79
- return [
80
- a11 * b11 + a12 * b21 + a13 * b31,
81
- a11 * b12 + a12 * b22 + a13 * b32,
82
- a11 * b13 + a12 * b23 + a13 * b33
83
- ];
84
- };
85
- var getMetrix4d = function (wyh) {
86
- var vector = wyh.vector;
87
- switch (vector.length) {
88
- case 2:
89
- var theta = pi * vector[0] / 180;
90
- var phi = pi * vector[1] / 180;
91
- var rot_u = [cos(phi) * cos(theta), cos(phi) * sin(theta), sin(phi)];
92
- break;
93
- case 3:
94
- var mode = norm(vector);
95
- rot_u = vectorDivide(vector, mode);
96
- break;
97
- default:
98
- throw new Error("向的维度不支持");
99
- }
100
- var [x_u, y_u, z_u] = rot_u;
101
- var cosa = cos(wyh.theta);
102
- var sina = sin(wyh.theta);
103
- var vera = 1 - cosa;
104
- return [
105
- [cosa + x_u ^ 2 * vera, x_u * y_u * vera - z_u * sina, x_u * z_u * vera + y_u * sina],
106
- [x_u * y_u * vera + z_u * sina, cosa + y_u ^ 2 * vera, y_u * z_u * vera - x_u * sina],
107
- [x_u * z_u * vera - y_u * sina, y_u * z_u * vera + x_u * sina, cosa + z_u ^ 2 * vera]
108
- ];
109
- };
110
- var getMetrix2d = function (wyh) {
111
- return [
112
- [cos(wyh.theta), -sin(wyh.theta)],
113
- [sin(wyh.theta), cos(wyh.theta)]
114
- ];
115
- };
116
- var xrs = function (dots, wyh) {
117
- // % 转动,缩放,平移,依次进行
118
- // % wyh.center为变换中心
119
- // % wyh.vector为转动轴的方向
120
- // % wyh.theta为转动角度
121
- // % wyh.scale为缩放系数,反射可设轴向系数为-1
122
- // % wyh.move为平移向量
123
- var { center = [0, 0, 0], scale = [1, 1, 1], move = [0, 0, 0] } = wyh;
124
- var rot = getMetrix4d(wyh);
125
- return dots.map(function (dot) {
126
- dot = vectorMinus(dot, center);
127
- dot = vectorMultify(dot, scale);
128
- dot = matrixMultify(dot, rot);
129
- dot = vectorPlus(dot, center);
130
- dot = vectorPlus(dot, move);
131
- return dot;
132
- });
133
- };
134
-
135
- var matrix = {
136
- xrs,
137
- getMetrix2d,
138
- getMetrix3d: getMetrix4d,
139
- crossMultiply,
140
- innerMultiply,
141
- vectorMultify,
142
- vectorDivide,
143
- vectorMinus,
144
- vectorPlus,
145
- norm
146
- };