three-usd-robot 0.7.0 → 0.8.1
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.
- package/README.md +87 -7
- package/dist/{ThreeUsdRobot-Ljh4PDVD.d.ts → ThreeUsdRobot-BZ_vlr1R.d.ts} +51 -7
- package/dist/ThreeUsdRobotLoader-HteyMZf1.d.ts +92 -0
- package/dist/{buildKinematicTree-Ccd2DIKH.d.ts → buildKinematicTree-D4R0hEtN.d.ts} +2 -2
- package/dist/{AssetResolver-CpIJNgWZ.d.ts → bytes-MOJ2oN-u.d.ts} +14 -1
- package/dist/chunk-FUPFJOXW.js +387 -0
- package/dist/chunk-FUPFJOXW.js.map +1 -0
- package/dist/chunk-IYKPVUZ2.js +406 -0
- package/dist/chunk-IYKPVUZ2.js.map +1 -0
- package/dist/{chunk-FL554IS5.js → chunk-JHOX3VUW.js} +115 -367
- package/dist/chunk-JHOX3VUW.js.map +1 -0
- package/dist/{chunk-O7XP5FQ4.js → chunk-P6CHTMGW.js} +4 -3
- package/dist/chunk-P6CHTMGW.js.map +1 -0
- package/dist/{chunk-4GPCBXUS.js → chunk-PHHMWMCA.js} +45 -410
- package/dist/chunk-PHHMWMCA.js.map +1 -0
- package/dist/core.d.ts +17 -5
- package/dist/core.js +3 -2
- package/dist/extras.d.ts +2 -2
- package/dist/helpers.d.ts +73 -3
- package/dist/helpers.js +125 -13
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +28 -18
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/react.d.ts +4 -4
- package/dist/react.js +4 -2
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/dist/ThreeUsdRobotLoader-BSIVFA48.d.ts +0 -67
- package/dist/chunk-4GPCBXUS.js.map +0 -1
- package/dist/chunk-FL554IS5.js.map +0 -1
- package/dist/chunk-O7XP5FQ4.js.map +0 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
// src/parser/ast.ts
|
|
2
|
+
var Quat = class _Quat {
|
|
3
|
+
constructor(real, imaginary) {
|
|
4
|
+
this.real = real;
|
|
5
|
+
this.imaginary = imaginary;
|
|
6
|
+
}
|
|
7
|
+
real;
|
|
8
|
+
imaginary;
|
|
9
|
+
/** Components in Three.js order `[x, y, z, w]`. */
|
|
10
|
+
toXYZW() {
|
|
11
|
+
return [this.imaginary[0], this.imaginary[1], this.imaginary[2], this.real];
|
|
12
|
+
}
|
|
13
|
+
static identity() {
|
|
14
|
+
return new _Quat(1, [0, 0, 0]);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var UsdMatrix = class _UsdMatrix {
|
|
18
|
+
constructor(values, dim) {
|
|
19
|
+
this.values = values;
|
|
20
|
+
this.dim = dim;
|
|
21
|
+
}
|
|
22
|
+
values;
|
|
23
|
+
dim;
|
|
24
|
+
static identity4() {
|
|
25
|
+
return new _UsdMatrix([
|
|
26
|
+
1,
|
|
27
|
+
0,
|
|
28
|
+
0,
|
|
29
|
+
0,
|
|
30
|
+
0,
|
|
31
|
+
1,
|
|
32
|
+
0,
|
|
33
|
+
0,
|
|
34
|
+
0,
|
|
35
|
+
0,
|
|
36
|
+
1,
|
|
37
|
+
0,
|
|
38
|
+
0,
|
|
39
|
+
0,
|
|
40
|
+
0,
|
|
41
|
+
1
|
|
42
|
+
], 4);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var AssetPath = class {
|
|
46
|
+
constructor(path) {
|
|
47
|
+
this.path = path;
|
|
48
|
+
}
|
|
49
|
+
path;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// src/kinematics/transforms.ts
|
|
53
|
+
var DEG2RAD = Math.PI / 180;
|
|
54
|
+
var RAD2DEG = 180 / Math.PI;
|
|
55
|
+
function identity4() {
|
|
56
|
+
return [
|
|
57
|
+
1,
|
|
58
|
+
0,
|
|
59
|
+
0,
|
|
60
|
+
0,
|
|
61
|
+
0,
|
|
62
|
+
1,
|
|
63
|
+
0,
|
|
64
|
+
0,
|
|
65
|
+
0,
|
|
66
|
+
0,
|
|
67
|
+
1,
|
|
68
|
+
0,
|
|
69
|
+
0,
|
|
70
|
+
0,
|
|
71
|
+
0,
|
|
72
|
+
1
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
function multiply(a, b) {
|
|
76
|
+
const a11 = a[0], a21 = a[1], a31 = a[2], a41 = a[3];
|
|
77
|
+
const a12 = a[4], a22 = a[5], a32 = a[6], a42 = a[7];
|
|
78
|
+
const a13 = a[8], a23 = a[9], a33 = a[10], a43 = a[11];
|
|
79
|
+
const a14 = a[12], a24 = a[13], a34 = a[14], a44 = a[15];
|
|
80
|
+
const b11 = b[0], b21 = b[1], b31 = b[2], b41 = b[3];
|
|
81
|
+
const b12 = b[4], b22 = b[5], b32 = b[6], b42 = b[7];
|
|
82
|
+
const b13 = b[8], b23 = b[9], b33 = b[10], b43 = b[11];
|
|
83
|
+
const b14 = b[12], b24 = b[13], b34 = b[14], b44 = b[15];
|
|
84
|
+
return [
|
|
85
|
+
a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41,
|
|
86
|
+
a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41,
|
|
87
|
+
a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41,
|
|
88
|
+
a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41,
|
|
89
|
+
a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42,
|
|
90
|
+
a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42,
|
|
91
|
+
a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42,
|
|
92
|
+
a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42,
|
|
93
|
+
a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43,
|
|
94
|
+
a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43,
|
|
95
|
+
a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43,
|
|
96
|
+
a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43,
|
|
97
|
+
a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44,
|
|
98
|
+
a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44,
|
|
99
|
+
a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44,
|
|
100
|
+
a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
function multiplyAll(matrices) {
|
|
104
|
+
let m = identity4();
|
|
105
|
+
for (const next of matrices) m = multiply(m, next);
|
|
106
|
+
return m;
|
|
107
|
+
}
|
|
108
|
+
function invert(m) {
|
|
109
|
+
const n11 = m[0], n21 = m[1], n31 = m[2], n41 = m[3];
|
|
110
|
+
const n12 = m[4], n22 = m[5], n32 = m[6], n42 = m[7];
|
|
111
|
+
const n13 = m[8], n23 = m[9], n33 = m[10], n43 = m[11];
|
|
112
|
+
const n14 = m[12], n24 = m[13], n34 = m[14], n44 = m[15];
|
|
113
|
+
const t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;
|
|
114
|
+
const t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;
|
|
115
|
+
const t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;
|
|
116
|
+
const t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
|
|
117
|
+
const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
|
|
118
|
+
if (det === 0) throw new Error("cannot invert a singular matrix");
|
|
119
|
+
const idet = 1 / det;
|
|
120
|
+
return [
|
|
121
|
+
t11 * idet,
|
|
122
|
+
(n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet,
|
|
123
|
+
(n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet,
|
|
124
|
+
(n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet,
|
|
125
|
+
t12 * idet,
|
|
126
|
+
(n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet,
|
|
127
|
+
(n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet,
|
|
128
|
+
(n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet,
|
|
129
|
+
t13 * idet,
|
|
130
|
+
(n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet,
|
|
131
|
+
(n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet,
|
|
132
|
+
(n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet,
|
|
133
|
+
t14 * idet,
|
|
134
|
+
(n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet,
|
|
135
|
+
(n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet,
|
|
136
|
+
(n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
function makeTranslation([x, y, z]) {
|
|
140
|
+
return [
|
|
141
|
+
1,
|
|
142
|
+
0,
|
|
143
|
+
0,
|
|
144
|
+
0,
|
|
145
|
+
0,
|
|
146
|
+
1,
|
|
147
|
+
0,
|
|
148
|
+
0,
|
|
149
|
+
0,
|
|
150
|
+
0,
|
|
151
|
+
1,
|
|
152
|
+
0,
|
|
153
|
+
x,
|
|
154
|
+
y,
|
|
155
|
+
z,
|
|
156
|
+
1
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
function makeScale([x, y, z]) {
|
|
160
|
+
return [
|
|
161
|
+
x,
|
|
162
|
+
0,
|
|
163
|
+
0,
|
|
164
|
+
0,
|
|
165
|
+
0,
|
|
166
|
+
y,
|
|
167
|
+
0,
|
|
168
|
+
0,
|
|
169
|
+
0,
|
|
170
|
+
0,
|
|
171
|
+
z,
|
|
172
|
+
0,
|
|
173
|
+
0,
|
|
174
|
+
0,
|
|
175
|
+
0,
|
|
176
|
+
1
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
function makeRotationX(rad) {
|
|
180
|
+
const c = Math.cos(rad);
|
|
181
|
+
const s = Math.sin(rad);
|
|
182
|
+
return [
|
|
183
|
+
1,
|
|
184
|
+
0,
|
|
185
|
+
0,
|
|
186
|
+
0,
|
|
187
|
+
0,
|
|
188
|
+
c,
|
|
189
|
+
s,
|
|
190
|
+
0,
|
|
191
|
+
0,
|
|
192
|
+
-s,
|
|
193
|
+
c,
|
|
194
|
+
0,
|
|
195
|
+
0,
|
|
196
|
+
0,
|
|
197
|
+
0,
|
|
198
|
+
1
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
function makeRotationY(rad) {
|
|
202
|
+
const c = Math.cos(rad);
|
|
203
|
+
const s = Math.sin(rad);
|
|
204
|
+
return [
|
|
205
|
+
c,
|
|
206
|
+
0,
|
|
207
|
+
-s,
|
|
208
|
+
0,
|
|
209
|
+
0,
|
|
210
|
+
1,
|
|
211
|
+
0,
|
|
212
|
+
0,
|
|
213
|
+
s,
|
|
214
|
+
0,
|
|
215
|
+
c,
|
|
216
|
+
0,
|
|
217
|
+
0,
|
|
218
|
+
0,
|
|
219
|
+
0,
|
|
220
|
+
1
|
|
221
|
+
];
|
|
222
|
+
}
|
|
223
|
+
function makeRotationZ(rad) {
|
|
224
|
+
const c = Math.cos(rad);
|
|
225
|
+
const s = Math.sin(rad);
|
|
226
|
+
return [
|
|
227
|
+
c,
|
|
228
|
+
s,
|
|
229
|
+
0,
|
|
230
|
+
0,
|
|
231
|
+
-s,
|
|
232
|
+
c,
|
|
233
|
+
0,
|
|
234
|
+
0,
|
|
235
|
+
0,
|
|
236
|
+
0,
|
|
237
|
+
1,
|
|
238
|
+
0,
|
|
239
|
+
0,
|
|
240
|
+
0,
|
|
241
|
+
0,
|
|
242
|
+
1
|
|
243
|
+
];
|
|
244
|
+
}
|
|
245
|
+
function makeRotationFromQuat(q) {
|
|
246
|
+
let x = q.imaginary[0];
|
|
247
|
+
let y = q.imaginary[1];
|
|
248
|
+
let z = q.imaginary[2];
|
|
249
|
+
let w = q.real;
|
|
250
|
+
const len = Math.hypot(x, y, z, w);
|
|
251
|
+
if (len > 0 && Math.abs(len - 1) > 1e-9) {
|
|
252
|
+
x /= len;
|
|
253
|
+
y /= len;
|
|
254
|
+
z /= len;
|
|
255
|
+
w /= len;
|
|
256
|
+
}
|
|
257
|
+
const x2 = x + x, y2 = y + y, z2 = z + z;
|
|
258
|
+
const xx = x * x2, xy = x * y2, xz = x * z2;
|
|
259
|
+
const yy = y * y2, yz = y * z2, zz = z * z2;
|
|
260
|
+
const wx = w * x2, wy = w * y2, wz = w * z2;
|
|
261
|
+
return [
|
|
262
|
+
1 - (yy + zz),
|
|
263
|
+
xy + wz,
|
|
264
|
+
xz - wy,
|
|
265
|
+
0,
|
|
266
|
+
xy - wz,
|
|
267
|
+
1 - (xx + zz),
|
|
268
|
+
yz + wx,
|
|
269
|
+
0,
|
|
270
|
+
xz + wy,
|
|
271
|
+
yz - wx,
|
|
272
|
+
1 - (xx + yy),
|
|
273
|
+
0,
|
|
274
|
+
0,
|
|
275
|
+
0,
|
|
276
|
+
0,
|
|
277
|
+
1
|
|
278
|
+
];
|
|
279
|
+
}
|
|
280
|
+
function makeEuler(angles, order) {
|
|
281
|
+
const perAxis = {
|
|
282
|
+
X: makeRotationX(angles[0]),
|
|
283
|
+
Y: makeRotationY(angles[1]),
|
|
284
|
+
Z: makeRotationZ(angles[2])
|
|
285
|
+
};
|
|
286
|
+
let m = identity4();
|
|
287
|
+
for (let i = order.length - 1; i >= 0; i--) {
|
|
288
|
+
const axis = perAxis[order[i]];
|
|
289
|
+
if (!axis)
|
|
290
|
+
throw new Error(
|
|
291
|
+
`invalid euler axis ${JSON.stringify(order[i])} in order ${JSON.stringify(order)}`
|
|
292
|
+
);
|
|
293
|
+
m = multiply(m, axis);
|
|
294
|
+
}
|
|
295
|
+
return m;
|
|
296
|
+
}
|
|
297
|
+
function fromUsdMatrix(m) {
|
|
298
|
+
if (m.dim !== 4 || m.values.length !== 16) {
|
|
299
|
+
throw new Error(`expected a 4x4 matrix but got dim=${m.dim}, length=${m.values.length}`);
|
|
300
|
+
}
|
|
301
|
+
return [...m.values];
|
|
302
|
+
}
|
|
303
|
+
function getTranslation(m) {
|
|
304
|
+
return [m[12], m[13], m[14]];
|
|
305
|
+
}
|
|
306
|
+
function toUsdMatrix(m) {
|
|
307
|
+
if (m.length !== 16) {
|
|
308
|
+
throw new Error(`expected 16 matrix elements but got ${m.length}`);
|
|
309
|
+
}
|
|
310
|
+
return new UsdMatrix([...m], 4);
|
|
311
|
+
}
|
|
312
|
+
function decomposeRigid(m) {
|
|
313
|
+
const position = [m[12], m[13], m[14]];
|
|
314
|
+
const b0 = [m[0], m[1], m[2]];
|
|
315
|
+
const b1 = [m[4], m[5], m[6]];
|
|
316
|
+
const b2 = [m[8], m[9], m[10]];
|
|
317
|
+
const EPS = 1e-6;
|
|
318
|
+
const rigid = Math.abs(norm(b0) - 1) < EPS && Math.abs(norm(b1) - 1) < EPS && Math.abs(norm(b2) - 1) < EPS && Math.abs(dot(b0, b1)) < EPS && Math.abs(dot(b1, b2)) < EPS && Math.abs(dot(b0, b2)) < EPS && dot(cross(b0, b1), b2) > 0;
|
|
319
|
+
const c0 = normalizeVec(b0);
|
|
320
|
+
const c1 = normalizeVec(subVec(b1, scaleVec(c0, dot(c0, b1))));
|
|
321
|
+
const c2 = cross(c0, c1);
|
|
322
|
+
const r11 = c0[0], r12 = c1[0], r13 = c2[0];
|
|
323
|
+
const r21 = c0[1], r22 = c1[1], r23 = c2[1];
|
|
324
|
+
const r31 = c0[2], r32 = c1[2], r33 = c2[2];
|
|
325
|
+
const trace = r11 + r22 + r33;
|
|
326
|
+
let w;
|
|
327
|
+
let x;
|
|
328
|
+
let y;
|
|
329
|
+
let z;
|
|
330
|
+
if (trace > 0) {
|
|
331
|
+
const s = 0.5 / Math.sqrt(trace + 1);
|
|
332
|
+
w = 0.25 / s;
|
|
333
|
+
x = (r32 - r23) * s;
|
|
334
|
+
y = (r13 - r31) * s;
|
|
335
|
+
z = (r21 - r12) * s;
|
|
336
|
+
} else if (r11 > r22 && r11 > r33) {
|
|
337
|
+
const s = 2 * Math.sqrt(1 + r11 - r22 - r33);
|
|
338
|
+
w = (r32 - r23) / s;
|
|
339
|
+
x = 0.25 * s;
|
|
340
|
+
y = (r12 + r21) / s;
|
|
341
|
+
z = (r13 + r31) / s;
|
|
342
|
+
} else if (r22 > r33) {
|
|
343
|
+
const s = 2 * Math.sqrt(1 + r22 - r11 - r33);
|
|
344
|
+
w = (r13 - r31) / s;
|
|
345
|
+
x = (r12 + r21) / s;
|
|
346
|
+
y = 0.25 * s;
|
|
347
|
+
z = (r23 + r32) / s;
|
|
348
|
+
} else {
|
|
349
|
+
const s = 2 * Math.sqrt(1 + r33 - r11 - r22);
|
|
350
|
+
w = (r21 - r12) / s;
|
|
351
|
+
x = (r13 + r31) / s;
|
|
352
|
+
y = (r23 + r32) / s;
|
|
353
|
+
z = 0.25 * s;
|
|
354
|
+
}
|
|
355
|
+
return { position, orientation: new Quat(w, [x, y, z]), rigid };
|
|
356
|
+
}
|
|
357
|
+
function dot(a, b) {
|
|
358
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
359
|
+
}
|
|
360
|
+
function norm(v) {
|
|
361
|
+
return Math.hypot(v[0], v[1], v[2]);
|
|
362
|
+
}
|
|
363
|
+
function subVec(a, b) {
|
|
364
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
365
|
+
}
|
|
366
|
+
function scaleVec(v, s) {
|
|
367
|
+
return [v[0] * s, v[1] * s, v[2] * s];
|
|
368
|
+
}
|
|
369
|
+
function normalizeVec(v) {
|
|
370
|
+
const n = norm(v);
|
|
371
|
+
return n > 0 ? scaleVec(v, 1 / n) : [1, 0, 0];
|
|
372
|
+
}
|
|
373
|
+
function cross(a, b) {
|
|
374
|
+
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// src/kinematics/sampling.ts
|
|
378
|
+
function interpolate(channel, t) {
|
|
379
|
+
const { times, values } = channel;
|
|
380
|
+
const n = times.length;
|
|
381
|
+
if (n === 0) return 0;
|
|
382
|
+
if (t <= times[0]) return values[0];
|
|
383
|
+
if (t >= times[n - 1]) return values[n - 1];
|
|
384
|
+
let lo = 0;
|
|
385
|
+
let hi = n - 1;
|
|
386
|
+
while (lo < hi) {
|
|
387
|
+
const mid = lo + hi >> 1;
|
|
388
|
+
if (times[mid] <= t) lo = mid + 1;
|
|
389
|
+
else hi = mid;
|
|
390
|
+
}
|
|
391
|
+
const i = lo - 1;
|
|
392
|
+
const t0 = times[i];
|
|
393
|
+
const t1 = times[i + 1];
|
|
394
|
+
const span = t1 - t0;
|
|
395
|
+
const f = span > 0 ? (t - t0) / span : 0;
|
|
396
|
+
return values[i] + (values[i + 1] - values[i]) * f;
|
|
397
|
+
}
|
|
398
|
+
function channelFromSamples(samples) {
|
|
399
|
+
const times = [...samples.keys()].sort((a, b) => a - b);
|
|
400
|
+
const values = times.map((t) => samples.get(t) ?? 0);
|
|
401
|
+
return { times, values };
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export { AssetPath, DEG2RAD, Quat, RAD2DEG, UsdMatrix, channelFromSamples, decomposeRigid, fromUsdMatrix, getTranslation, identity4, interpolate, invert, makeEuler, makeRotationFromQuat, makeRotationX, makeRotationY, makeRotationZ, makeScale, makeTranslation, multiply, multiplyAll, toUsdMatrix };
|
|
405
|
+
//# sourceMappingURL=chunk-IYKPVUZ2.js.map
|
|
406
|
+
//# sourceMappingURL=chunk-IYKPVUZ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/parser/ast.ts","../src/kinematics/transforms.ts","../src/kinematics/sampling.ts"],"names":[],"mappings":"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","file":"chunk-IYKPVUZ2.js","sourcesContent":["/**\n * AST and value types for the USDA (ASCII USD) format.\n *\n * The parser (`parseUsda`) produces a {@link UsdaFile}. The USD-conformant\n * runtime layer (`usd/Stage.ts` etc.) wraps this AST to expose a pxr-USD-style\n * API (`GetPrimAtPath`, `GetAttribute`, `Get`, `GetTargets`, ...).\n */\n\n// ---------------------------------------------------------------------------\n// Value types\n// ---------------------------------------------------------------------------\n\n/** Fixed-length numeric tuples, mirroring `GfVec2/3/4`. */\nexport type Vec2 = [number, number];\nexport type Vec3 = [number, number, number];\nexport type Vec4 = [number, number, number, number];\n\n/**\n * A quaternion, mirroring `GfQuatf/d/h`.\n *\n * USDA authors quats as `(w, x, y, z)` — real part first. We keep the real and\n * imaginary parts explicit so downstream code never has to guess the component\n * order (Three.js, by contrast, uses `(x, y, z, w)`).\n */\nexport class Quat {\n constructor(\n readonly real: number,\n readonly imaginary: Vec3,\n ) {}\n\n /** Components in Three.js order `[x, y, z, w]`. */\n toXYZW(): Vec4 {\n return [this.imaginary[0], this.imaginary[1], this.imaginary[2], this.real];\n }\n\n static identity(): Quat {\n return new Quat(1, [0, 0, 0]);\n }\n}\n\n/**\n * A square matrix (`GfMatrix3d`/`GfMatrix4d`), stored flat in **row-major**\n * order exactly as authored in USD (USD matrices are row-major).\n */\nexport class UsdMatrix {\n constructor(\n readonly values: number[],\n readonly dim: 3 | 4,\n ) {}\n\n static identity4(): UsdMatrix {\n // biome-ignore format: keep matrix layout readable\n return new UsdMatrix([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ], 4);\n }\n}\n\n/** An asset reference (`SdfAssetPath`), e.g. `@./meshes/link0.usd@`. */\nexport class AssetPath {\n constructor(readonly path: string) {}\n}\n\n/**\n * A namespace path into a stage (`SdfPath`), e.g. `/World/robot/link0` or a\n * property path `/World/robot.xformOp:translate`. Stored as the authored\n * string; relationship/connection resolution happens in the runtime layer.\n */\nexport type SdfPath = string;\n\n/** A reference / payload composition arc as authored (resolved in M8). */\nexport type CompositionArc = {\n assetPath?: AssetPath;\n primPath?: SdfPath;\n};\n\n/** Any value an attribute or metadatum can hold. */\nexport type UsdValue =\n | number\n | boolean\n | string\n | null\n | Vec2\n | Vec3\n | Vec4\n | Quat\n | UsdMatrix\n | AssetPath\n | SdfPath\n | CompositionArc\n | UsdValue[]\n | UsdDictionary;\n\n/** A nested metadata dictionary (`customData`, `assetInfo`, ...). */\nexport type UsdDictionary = { [key: string]: UsdValue };\n\n// ---------------------------------------------------------------------------\n// AST nodes\n// ---------------------------------------------------------------------------\n\nexport type Specifier = \"def\" | \"over\" | \"class\";\n\nexport type Variability = \"varying\" | \"uniform\";\n\n/** List-editing qualifier on relationships and list-op metadata. */\nexport type ListOp = \"explicit\" | \"prepend\" | \"append\" | \"add\" | \"delete\" | \"reorder\";\n\nexport type MetadataMap = { [key: string]: UsdValue };\n\n/** A parsed `.usda` layer. */\nexport type UsdaFile = {\n /** Version from the `#usda X.Y` magic line. */\n version: string;\n /** Layer-level metadata (`defaultPrim`, `upAxis`, `metersPerUnit`, ...). */\n metadata: MetadataMap;\n /** Root prims, in authored order. */\n prims: PrimSpec[];\n};\n\nexport type PrimSpec = {\n specifier: Specifier;\n /** Schema type, e.g. `Xform`, `Mesh`, `PhysicsRevoluteJoint`. Empty if typeless. */\n typeName: string;\n name: string;\n metadata: MetadataMap;\n properties: PropertySpec[];\n children: PrimSpec[];\n /** Authored variant sets (`variantSet \"name\" = { ... }`), if any. */\n variantSets?: VariantSetMap;\n /** 1-based source line of the prim declaration (for diagnostics). */\n line: number;\n};\n\n/** The opinions a single variant contributes when selected. */\nexport type VariantContent = {\n properties: PropertySpec[];\n children: PrimSpec[];\n /**\n * Metadata authored on the variant itself. Composition arcs live here — the\n * common \"this variant references another layer\" pattern in Isaac Sim assets.\n */\n metadata: MetadataMap;\n};\n\n/** `variantSetName → variantName → content`. */\nexport type VariantSetMap = { [setName: string]: { [variantName: string]: VariantContent } };\n\nexport type PropertySpec = AttributeSpec | RelationshipSpec;\n\nexport type AttributeSpec = {\n kind: \"attribute\";\n name: string;\n /** USD type name without the `[]` suffix, e.g. `float3`, `token`, `quatf`. */\n typeName: string;\n isArray: boolean;\n variability: Variability;\n custom: boolean;\n /** Default (time-independent) value, if authored. */\n value?: UsdValue;\n /** Time samples keyed by time code, if authored as `{ t: v, ... }`. */\n timeSamples?: Map<number, UsdValue>;\n /** Connection target paths (`attr.connect = <path>`), if authored. */\n connections?: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n\nexport type RelationshipSpec = {\n kind: \"relationship\";\n name: string;\n custom: boolean;\n listOp: ListOp;\n /** Target paths; empty when authored as `None`. */\n targets: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n","/**\n * Minimal 4×4 matrix math, Three.js-independent.\n *\n * ## Convention\n *\n * A {@link Mat4} is a flat 16-element array in **column-major** order — the\n * exact layout of `THREE.Matrix4.elements`, so a `Mat4` can be handed to\n * `matrix4.fromArray(m)` with no transposition. Transforms use the\n * column-vector convention `v' = M · v`; the translation lives at indices\n * `[12, 13, 14]`.\n *\n * Conveniently, OpenUSD stores `GfMatrix4d` **row-major** with a row-vector\n * convention (`v' = v · M`). The two raw 16-number arrays for the *same*\n * transform are therefore bit-identical, which is why {@link fromUsdMatrix} is\n * a plain copy. See the module test for a worked example.\n */\n\nimport { Quat, UsdMatrix, type Vec3 } from \"../parser/ast.js\";\n\n/** Column-major 4×4 matrix (Three.js `elements` layout). */\nexport type Mat4 = number[];\n\nexport const DEG2RAD = Math.PI / 180;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport function identity4(): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Matrix product `a · b` (column-major), matching `THREE.Matrix4.multiplyMatrices`. */\nexport function multiply(a: Mat4, b: Mat4): Mat4 {\n const a11 = a[0]!,\n a21 = a[1]!,\n a31 = a[2]!,\n a41 = a[3]!;\n const a12 = a[4]!,\n a22 = a[5]!,\n a32 = a[6]!,\n a42 = a[7]!;\n const a13 = a[8]!,\n a23 = a[9]!,\n a33 = a[10]!,\n a43 = a[11]!;\n const a14 = a[12]!,\n a24 = a[13]!,\n a34 = a[14]!,\n a44 = a[15]!;\n\n const b11 = b[0]!,\n b21 = b[1]!,\n b31 = b[2]!,\n b41 = b[3]!;\n const b12 = b[4]!,\n b22 = b[5]!,\n b32 = b[6]!,\n b42 = b[7]!;\n const b13 = b[8]!,\n b23 = b[9]!,\n b33 = b[10]!,\n b43 = b[11]!;\n const b14 = b[12]!,\n b24 = b[13]!,\n b34 = b[14]!,\n b44 = b[15]!;\n\n return [\n a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41,\n a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41,\n a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41,\n a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41,\n\n a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42,\n a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42,\n a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42,\n a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42,\n\n a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43,\n a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43,\n a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43,\n a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43,\n\n a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44,\n a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44,\n a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44,\n a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44,\n ];\n}\n\n/** Product of a list of matrices, left-to-right (`m[0] · m[1] · …`). */\nexport function multiplyAll(matrices: Mat4[]): Mat4 {\n let m = identity4();\n for (const next of matrices) m = multiply(m, next);\n return m;\n}\n\n/** Inverse (column-major), matching `THREE.Matrix4.invert`. Throws if singular. */\nexport function invert(m: Mat4): Mat4 {\n const n11 = m[0]!,\n n21 = m[1]!,\n n31 = m[2]!,\n n41 = m[3]!;\n const n12 = m[4]!,\n n22 = m[5]!,\n n32 = m[6]!,\n n42 = m[7]!;\n const n13 = m[8]!,\n n23 = m[9]!,\n n33 = m[10]!,\n n43 = m[11]!;\n const n14 = m[12]!,\n n24 = m[13]!,\n n34 = m[14]!,\n n44 = m[15]!;\n\n const t11 =\n n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44;\n const t12 =\n n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44;\n const t13 =\n n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44;\n const t14 =\n n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0) throw new Error(\"cannot invert a singular matrix\");\n const idet = 1 / det;\n\n return [\n t11 * idet,\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n idet,\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n idet,\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n idet,\n\n t12 * idet,\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n idet,\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n idet,\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n idet,\n\n t13 * idet,\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n idet,\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n idet,\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n idet,\n\n t14 * idet,\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n idet,\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n idet,\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n idet,\n ];\n}\n\nexport function makeTranslation([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n x, y, z, 1,\n ];\n}\n\nexport function makeScale([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationX(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, c, s, 0,\n 0, -s, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationY(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, 0, -s, 0,\n 0, 1, 0, 0,\n s, 0, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationZ(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, s, 0, 0,\n -s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Rotation matrix from a (normalized) quaternion, matching `THREE.Matrix4.compose`. */\nexport function makeRotationFromQuat(q: Quat): Mat4 {\n let x = q.imaginary[0];\n let y = q.imaginary[1];\n let z = q.imaginary[2];\n let w = q.real;\n const len = Math.hypot(x, y, z, w);\n if (len > 0 && Math.abs(len - 1) > 1e-9) {\n x /= len;\n y /= len;\n z /= len;\n w /= len;\n }\n\n const x2 = x + x,\n y2 = y + y,\n z2 = z + z;\n const xx = x * x2,\n xy = x * y2,\n xz = x * z2;\n const yy = y * y2,\n yz = y * z2,\n zz = z * z2;\n const wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n // biome-ignore format: matrix layout\n return [\n 1 - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1 - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1 - (xx + yy), 0,\n 0, 0, 0, 1,\n ];\n}\n\n/**\n * Euler rotation matrix for the given axis order (e.g. `\"XYZ\"`), with per-axis\n * angles in **radians** indexed by axis (`angles[0]`=X, `[1]`=Y, `[2]`=Z).\n *\n * Follows OpenUSD's `rotate<ORDER>` semantics: the first listed axis is applied\n * first to the geometry, so `\"XYZ\"` yields `Rz · Ry · Rx` in column-vector form.\n */\nexport function makeEuler(angles: Vec3, order: string): Mat4 {\n const perAxis: Record<string, Mat4> = {\n X: makeRotationX(angles[0]),\n Y: makeRotationY(angles[1]),\n Z: makeRotationZ(angles[2]),\n };\n let m = identity4();\n for (let i = order.length - 1; i >= 0; i--) {\n const axis = perAxis[order[i]!];\n if (!axis)\n throw new Error(\n `invalid euler axis ${JSON.stringify(order[i])} in order ${JSON.stringify(order)}`,\n );\n m = multiply(m, axis);\n }\n return m;\n}\n\n/**\n * Copy a USD matrix into a {@link Mat4}. USD's row-major storage is identical to\n * Three.js column-major elements for the same transform (see module docs), so\n * this is a straight copy after a dimension check.\n */\nexport function fromUsdMatrix(m: UsdMatrix): Mat4 {\n if (m.dim !== 4 || m.values.length !== 16) {\n throw new Error(`expected a 4x4 matrix but got dim=${m.dim}, length=${m.values.length}`);\n }\n return [...m.values];\n}\n\n/** Extract the translation component `[x, y, z]` from a {@link Mat4}. */\nexport function getTranslation(m: Mat4): Vec3 {\n return [m[12]!, m[13]!, m[14]!];\n}\n\n/** Copy a {@link Mat4} into a USD `matrix4d` — same flat layout (see module docs). */\nexport function toUsdMatrix(m: Mat4): UsdMatrix {\n if (m.length !== 16) {\n throw new Error(`expected 16 matrix elements but got ${m.length}`);\n }\n return new UsdMatrix([...m], 4);\n}\n\n/**\n * Decompose a rigid transform into translation + orientation (M13 export).\n *\n * The rotation basis is orthonormalized (Gram-Schmidt, right-handed) before\n * quaternion extraction; `rigid` reports whether the input already was rigid\n * within tolerance, so callers can warn that scale/shear/reflection was\n * discarded.\n */\nexport function decomposeRigid(m: Mat4): { position: Vec3; orientation: Quat; rigid: boolean } {\n const position: Vec3 = [m[12]!, m[13]!, m[14]!];\n\n // Rotation-block basis columns.\n const b0: Vec3 = [m[0]!, m[1]!, m[2]!];\n const b1: Vec3 = [m[4]!, m[5]!, m[6]!];\n const b2: Vec3 = [m[8]!, m[9]!, m[10]!];\n\n const EPS = 1e-6;\n const rigid =\n Math.abs(norm(b0) - 1) < EPS &&\n Math.abs(norm(b1) - 1) < EPS &&\n Math.abs(norm(b2) - 1) < EPS &&\n Math.abs(dot(b0, b1)) < EPS &&\n Math.abs(dot(b1, b2)) < EPS &&\n Math.abs(dot(b0, b2)) < EPS &&\n dot(cross(b0, b1), b2) > 0; // right-handed (no reflection)\n\n const c0 = normalizeVec(b0);\n const c1 = normalizeVec(subVec(b1, scaleVec(c0, dot(c0, b1))));\n const c2 = cross(c0, c1);\n\n // Row-major rotation entries from the orthonormal columns.\n const r11 = c0[0],\n r12 = c1[0],\n r13 = c2[0];\n const r21 = c0[1],\n r22 = c1[1],\n r23 = c2[1];\n const r31 = c0[2],\n r32 = c1[2],\n r33 = c2[2];\n\n // Matrix → quaternion (Shepperd's method, as in THREE.Quaternion.setFromRotationMatrix).\n const trace = r11 + r22 + r33;\n let w: number;\n let x: number;\n let y: number;\n let z: number;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n w = 0.25 / s;\n x = (r32 - r23) * s;\n y = (r13 - r31) * s;\n z = (r21 - r12) * s;\n } else if (r11 > r22 && r11 > r33) {\n const s = 2 * Math.sqrt(1 + r11 - r22 - r33);\n w = (r32 - r23) / s;\n x = 0.25 * s;\n y = (r12 + r21) / s;\n z = (r13 + r31) / s;\n } else if (r22 > r33) {\n const s = 2 * Math.sqrt(1 + r22 - r11 - r33);\n w = (r13 - r31) / s;\n x = (r12 + r21) / s;\n y = 0.25 * s;\n z = (r23 + r32) / s;\n } else {\n const s = 2 * Math.sqrt(1 + r33 - r11 - r22);\n w = (r21 - r12) / s;\n x = (r13 + r31) / s;\n y = (r23 + r32) / s;\n z = 0.25 * s;\n }\n\n return { position, orientation: new Quat(w, [x, y, z]), rigid };\n}\n\n// --- small Vec3 helpers for decomposeRigid ---------------------------------\n\nfunction dot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction norm(v: Vec3): number {\n return Math.hypot(v[0], v[1], v[2]);\n}\n\nfunction subVec(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction scaleVec(v: Vec3, s: number): Vec3 {\n return [v[0] * s, v[1] * s, v[2] * s];\n}\n\nfunction normalizeVec(v: Vec3): Vec3 {\n const n = norm(v);\n return n > 0 ? scaleVec(v, 1 / n) : [1, 0, 0];\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n","/**\n * Time-sample interpolation for animated values (e.g. joint trajectories).\n *\n * USD time samples are keyed by time code. We linearly interpolate between the\n * two bracketing samples and hold the endpoints outside the authored range\n * (matching USD's held extrapolation).\n */\n\n/** A sorted time-sampled scalar channel. */\nexport type SampleChannel = {\n /** Sample times, ascending. */\n times: number[];\n /** Sample values, parallel to {@link times} (SI units). */\n values: number[];\n};\n\n/** Linearly sample `channel` at time `t` (held outside the range). */\nexport function interpolate(channel: SampleChannel, t: number): number {\n const { times, values } = channel;\n const n = times.length;\n if (n === 0) return 0;\n if (t <= times[0]!) return values[0]!;\n if (t >= times[n - 1]!) return values[n - 1]!;\n\n // Binary search for the first sample time > t.\n let lo = 0;\n let hi = n - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (times[mid]! <= t) lo = mid + 1;\n else hi = mid;\n }\n const i = lo - 1; // times[i] <= t < times[i+1]\n const t0 = times[i]!;\n const t1 = times[i + 1]!;\n const span = t1 - t0;\n const f = span > 0 ? (t - t0) / span : 0;\n return values[i]! + (values[i + 1]! - values[i]!) * f;\n}\n\n/** Build a sorted {@link SampleChannel} from `(time → value)` pairs via `map`. */\nexport function channelFromSamples(samples: Map<number, number>): SampleChannel {\n const times = [...samples.keys()].sort((a, b) => a - b);\n const values = times.map((t) => samples.get(t) ?? 0);\n return { times, values };\n}\n"]}
|