@syamaz/catmull-rom-spline 1.0.2 → 1.0.3
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/CHANGELOG.md +7 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/usecase/batch.d.ts +17 -0
- package/dist/usecase/batch.d.ts.map +1 -0
- package/dist/usecase/batch.js +34 -0
- package/dist/usecase/batch.js.map +1 -0
- package/dist/usecase/index.d.ts +2 -0
- package/dist/usecase/index.d.ts.map +1 -0
- package/dist/usecase/index.js +2 -0
- package/dist/usecase/index.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.3](https://github.com/sYamaz/catmull-rom-spline/compare/v1.0.2...v1.0.3) (2024-11-10)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* add documentation ([ac960ad](https://github.com/sYamaz/catmull-rom-spline/commit/ac960ad5ed5d10c5041bbe9cbd85902bb9feedc5))
|
|
9
|
+
|
|
3
10
|
## [1.0.2](https://github.com/sYamaz/catmull-rom-spline/compare/v1.0.1...v1.0.2) (2024-11-10)
|
|
4
11
|
|
|
5
12
|
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface ICatmullRomSpline<T> {
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param p0 control point 0
|
|
5
|
+
* @param p1 control point 1
|
|
6
|
+
* @param p2 control point 2
|
|
7
|
+
* @param p3 control point 3
|
|
8
|
+
* @param alpha tension parameter(range: 0.0 ~ 1.0)
|
|
9
|
+
* @param points desired curve points
|
|
10
|
+
*/
|
|
11
|
+
interpolate(p0: T, p1: T, p2: T, p3: T, alpha: number, points: number): T[];
|
|
12
|
+
}
|
|
13
|
+
export declare abstract class BasicCatmullRomSpline<TPoint> implements ICatmullRomSpline<TPoint> {
|
|
14
|
+
/**
|
|
15
|
+
* 2点間の距離を返します
|
|
16
|
+
* @param pi 点i
|
|
17
|
+
* @param pj 点j
|
|
18
|
+
*/
|
|
19
|
+
protected abstract calcDistance(pi: TPoint, pj: TPoint): number;
|
|
20
|
+
/**
|
|
21
|
+
* 原点を基準に座標を定数倍した座標を生成し、返します
|
|
22
|
+
* @param p
|
|
23
|
+
* @param mul
|
|
24
|
+
*/
|
|
25
|
+
protected abstract magnify(p: TPoint, mul: number): TPoint;
|
|
26
|
+
/**
|
|
27
|
+
* 2点を加えた座標を生成し、返します
|
|
28
|
+
* @param pi
|
|
29
|
+
* @param pj
|
|
30
|
+
*/
|
|
31
|
+
protected abstract sum(pi: TPoint, pj: TPoint): TPoint;
|
|
32
|
+
protected calcTj: (ti: number, pi: TPoint, pj: TPoint, alpha: number) => number;
|
|
33
|
+
protected calcTjArray: (p0: TPoint, p1: TPoint, p2: TPoint, p3: TPoint, alpha: number) => [t0: number, t1: number, t2: number, t3: number];
|
|
34
|
+
/**
|
|
35
|
+
* 等差数列を作成し、中間値の配列を返します。
|
|
36
|
+
* @param start 開始値
|
|
37
|
+
* @param end 終了値
|
|
38
|
+
* @param count 中間値の数. 0以上の整数であること
|
|
39
|
+
* @returns 中間値の配列
|
|
40
|
+
*/
|
|
41
|
+
private generateLinspaceMidValues;
|
|
42
|
+
interpolate: (p0: TPoint, p1: TPoint, p2: TPoint, p3: TPoint, alpha: number, points: number) => TPoint[];
|
|
43
|
+
}
|
|
44
|
+
export interface IPoint2D {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
}
|
|
48
|
+
export declare class Simple2DCatmullRomSpline extends BasicCatmullRomSpline<IPoint2D> {
|
|
49
|
+
constructor();
|
|
50
|
+
protected calcDistance(pi: IPoint2D, pj: IPoint2D): number;
|
|
51
|
+
protected magnify(p: IPoint2D, mul: number): IPoint2D;
|
|
52
|
+
protected sum(pi: IPoint2D, pj: IPoint2D): IPoint2D;
|
|
53
|
+
}
|
|
54
|
+
export interface IPoint3D {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
z: number;
|
|
58
|
+
}
|
|
59
|
+
export declare class Simple3DCatmullRomSpline extends BasicCatmullRomSpline<IPoint3D> {
|
|
60
|
+
constructor();
|
|
61
|
+
protected calcDistance(pi: IPoint3D, pj: IPoint3D): number;
|
|
62
|
+
protected magnify(p: IPoint3D, mul: number): IPoint3D;
|
|
63
|
+
protected sum(pi: IPoint3D, pj: IPoint3D): IPoint3D;
|
|
64
|
+
}
|
|
65
|
+
export * from './usecase/index';
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAChC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAC,CAAC,EAAE,EAAE,EAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;CAC5E;AAED,8BAAsB,qBAAqB,CAAC,MAAM,CAAE,YAAW,iBAAiB,CAAC,MAAM,CAAC;IACpF;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAE,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,MAAM,GAAE,MAAM;IAC7D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,MAAM,GAAG,MAAM;IACzD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,MAAM,GAAE,MAAM;IAEnD,SAAS,CAAC,MAAM,OAAO,MAAM,MAAK,MAAM,MAAK,MAAM,SAAQ,MAAM,KAAE,MAAM,CAExE;IAED,SAAS,CAAC,WAAW,OAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,KAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAOxI;IAED;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB,CAYhC;IAEM,WAAW,OAAQ,MAAM,MAAM,MAAM,MAAK,MAAM,MAAK,MAAM,SAAS,MAAM,UAAU,MAAM,KAAG,MAAM,EAAE,CA4B3G;CACJ;AAED,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAC,MAAM,CAAA;IACR,CAAC,EAAC,MAAM,CAAA;CACX;AAED,qBAAa,wBAAyB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC;;IAIzE,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM;IAM1D,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAMrD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;CAMtD;AAGD,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAC,MAAM,CAAA;IACR,CAAC,EAAC,MAAM,CAAA;IACR,CAAC,EAAC,MAAM,CAAA;CACX;AAED,qBAAa,wBAAyB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC;;IAIzE,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM;IAO1D,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAOrD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;CAOtD;AAED,cAAc,iBAAiB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
export class BasicCatmullRomSpline {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.calcTj = (ti, pi, pj, alpha) => {
|
|
4
|
+
return Math.pow(this.calcDistance(pi, pj), alpha) + ti;
|
|
5
|
+
};
|
|
6
|
+
this.calcTjArray = (p0, p1, p2, p3, alpha) => {
|
|
7
|
+
const t0 = 0;
|
|
8
|
+
const t1 = this.calcTj(t0, p0, p1, alpha);
|
|
9
|
+
const t2 = this.calcTj(t1, p1, p2, alpha);
|
|
10
|
+
const t3 = this.calcTj(t2, p2, p3, alpha);
|
|
11
|
+
return [t0, t1, t2, t3];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 等差数列を作成し、中間値の配列を返します。
|
|
15
|
+
* @param start 開始値
|
|
16
|
+
* @param end 終了値
|
|
17
|
+
* @param count 中間値の数. 0以上の整数であること
|
|
18
|
+
* @returns 中間値の配列
|
|
19
|
+
*/
|
|
20
|
+
this.generateLinspaceMidValues = (start, end, count) => {
|
|
21
|
+
/** 中間値の数が0以下の時は空の配列を返す */
|
|
22
|
+
if (count <= 0)
|
|
23
|
+
return [];
|
|
24
|
+
const step = (end - start) / (count + 1); // 等差を計算。中間値の数が1の時は区間を2で割る
|
|
25
|
+
const sequence = [];
|
|
26
|
+
for (let i = 0; i < count; i++) {
|
|
27
|
+
sequence.push(start + step * (i + 1));
|
|
28
|
+
}
|
|
29
|
+
return sequence;
|
|
30
|
+
};
|
|
31
|
+
this.interpolate = (p0, p1, p2, p3, alpha, points) => {
|
|
32
|
+
// t0~t3を算出する
|
|
33
|
+
const [t0, t1, t2, t3] = this.calcTjArray(p0, p1, p2, p3, alpha);
|
|
34
|
+
// t1とt2の等差数列
|
|
35
|
+
const fromT1toT2 = this.generateLinspaceMidValues(t1, t2, points);
|
|
36
|
+
const ret = [];
|
|
37
|
+
for (const t of fromT1toT2) {
|
|
38
|
+
const t0_t = t0 - t;
|
|
39
|
+
const t1_t = t1 - t;
|
|
40
|
+
const t2_t = t2 - t;
|
|
41
|
+
const t3_t = t3 - t;
|
|
42
|
+
const t1_t0 = t1 - t0;
|
|
43
|
+
const t2_t0 = t2 - t0;
|
|
44
|
+
const t2_t1 = t2 - t1;
|
|
45
|
+
const t3_t1 = t3 - t1;
|
|
46
|
+
const t3_t2 = t3 - t2;
|
|
47
|
+
const a1 = this.sum(this.magnify(p0, t1_t / t1_t0), this.magnify(p1, -t0_t / t1_t0));
|
|
48
|
+
const a2 = this.sum(this.magnify(p1, t2_t / t2_t1), this.magnify(p2, -t1_t / t2_t1));
|
|
49
|
+
const a3 = this.sum(this.magnify(p2, t3_t / t3_t2), this.magnify(p3, -t2_t / t3_t2));
|
|
50
|
+
const b1 = this.sum(this.magnify(a1, t2_t / t2_t0), this.magnify(a2, -t0_t / t2_t0));
|
|
51
|
+
const b2 = this.sum(this.magnify(a2, t3_t / t3_t1), this.magnify(a3, -t1_t / t3_t1));
|
|
52
|
+
const p = this.sum(this.magnify(b1, t2_t / t2_t1), this.magnify(b2, -t1_t / t2_t1));
|
|
53
|
+
ret.push(p);
|
|
54
|
+
}
|
|
55
|
+
return ret;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export class Simple2DCatmullRomSpline extends BasicCatmullRomSpline {
|
|
60
|
+
constructor() {
|
|
61
|
+
super();
|
|
62
|
+
}
|
|
63
|
+
calcDistance(pi, pj) {
|
|
64
|
+
const dx = pi.x - pj.x;
|
|
65
|
+
const dy = pi.y - pj.y;
|
|
66
|
+
return Math.sqrt(dx ** 2 + dy ** 2);
|
|
67
|
+
}
|
|
68
|
+
magnify(p, mul) {
|
|
69
|
+
return {
|
|
70
|
+
x: p.x * mul,
|
|
71
|
+
y: p.y * mul
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
sum(pi, pj) {
|
|
75
|
+
return {
|
|
76
|
+
x: pi.x + pj.x,
|
|
77
|
+
y: pi.y + pj.y
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export class Simple3DCatmullRomSpline extends BasicCatmullRomSpline {
|
|
82
|
+
constructor() {
|
|
83
|
+
super();
|
|
84
|
+
}
|
|
85
|
+
calcDistance(pi, pj) {
|
|
86
|
+
const dx = pi.x - pj.x;
|
|
87
|
+
const dy = pi.y - pj.y;
|
|
88
|
+
const dz = pi.z - pj.z;
|
|
89
|
+
return Math.sqrt(dx ** 2 + dy ** 2 + dz ** 2);
|
|
90
|
+
}
|
|
91
|
+
magnify(p, mul) {
|
|
92
|
+
return {
|
|
93
|
+
x: p.x * mul,
|
|
94
|
+
y: p.y * mul,
|
|
95
|
+
z: p.z * mul
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
sum(pi, pj) {
|
|
99
|
+
return {
|
|
100
|
+
x: pi.x + pj.x,
|
|
101
|
+
y: pi.y + pj.y,
|
|
102
|
+
z: pi.z + pj.z
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export * from './usecase/index';
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ICatmullRomSpline } from "../index";
|
|
2
|
+
/**
|
|
3
|
+
* 4点以上の点について一括でCatmull-rom spline補間を適用するためのクラス
|
|
4
|
+
*/
|
|
5
|
+
export declare class BatchInterpolator<TPoint> {
|
|
6
|
+
private readonly spline;
|
|
7
|
+
private readonly alpha;
|
|
8
|
+
private readonly points;
|
|
9
|
+
constructor(spline: ICatmullRomSpline<TPoint>, alpha: number, points: number);
|
|
10
|
+
/**
|
|
11
|
+
* 任意の点数に対して補間を行います。
|
|
12
|
+
* @param samples
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
interpolate: (samples: TPoint[]) => TPoint[];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/usecase/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA6B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAA1F,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAmB,KAAK,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IAE/H;;;;OAIG;IACH,WAAW,YAAa,MAAM,EAAE,cAoB/B;CACJ"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 4点以上の点について一括でCatmull-rom spline補間を適用するためのクラス
|
|
3
|
+
*/
|
|
4
|
+
export class BatchInterpolator {
|
|
5
|
+
constructor(spline, alpha, points) {
|
|
6
|
+
this.spline = spline;
|
|
7
|
+
this.alpha = alpha;
|
|
8
|
+
this.points = points;
|
|
9
|
+
/**
|
|
10
|
+
* 任意の点数に対して補間を行います。
|
|
11
|
+
* @param samples
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
this.interpolate = (samples) => {
|
|
15
|
+
const len = samples.length;
|
|
16
|
+
if (samples.length < 4) {
|
|
17
|
+
return samples;
|
|
18
|
+
}
|
|
19
|
+
const ret = [samples[0]];
|
|
20
|
+
for (let i = 0; i < len; i++) {
|
|
21
|
+
const slice = samples.slice(i, i + 4);
|
|
22
|
+
if (slice.length === 4) {
|
|
23
|
+
const ipPoints = this.spline.interpolate(slice[0], slice[1], slice[2], slice[3], this.alpha, this.points);
|
|
24
|
+
ret.push(slice[1]);
|
|
25
|
+
ret.push(...ipPoints);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const last = samples.slice(samples.length - 2);
|
|
29
|
+
ret.push(...last);
|
|
30
|
+
return ret;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/usecase/batch.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC1B,YAA6B,MAAiC,EAAmB,KAAa,EAAmB,MAAc;QAAlG,WAAM,GAAN,MAAM,CAA2B;QAAmB,UAAK,GAAL,KAAK,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAQ;QAE/H;;;;WAIG;QACH,gBAAW,GAAG,CAAC,OAAiB,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;YAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAA;YAClB,CAAC;YAED,MAAM,GAAG,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBACzG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;oBAClB,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;gBACzB,CAAC;YACL,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC9C,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YACjB,OAAO,GAAG,CAAA;QACd,CAAC,CAAA;IA3BkI,CAAC;CA4BvI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|