@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 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
 
@@ -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,2 @@
1
+ export * from './batch';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from './batch';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syamaz/catmull-rom-spline",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "author": "Shun Yamazaki",
5
5
  "license": "MIT",
6
6
  "files": [