manga-renderer 1.0.0

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.
Files changed (148) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +118 -0
  3. package/dist/index.d.ts +28 -0
  4. package/dist/index.js +184 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/book/book.d.ts +133 -0
  7. package/dist/lib/book/book.js +329 -0
  8. package/dist/lib/book/book.js.map +1 -0
  9. package/dist/lib/book/envelope.d.ts +26 -0
  10. package/dist/lib/book/envelope.js +158 -0
  11. package/dist/lib/book/envelope.js.map +1 -0
  12. package/dist/lib/book/imagePacking.d.ts +10 -0
  13. package/dist/lib/book/imagePacking.js +213 -0
  14. package/dist/lib/book/imagePacking.js.map +1 -0
  15. package/dist/lib/book/layout.d.ts +41 -0
  16. package/dist/lib/book/layout.js +14 -0
  17. package/dist/lib/book/layout.js.map +1 -0
  18. package/dist/lib/book/notebook.d.ts +72 -0
  19. package/dist/lib/book/notebook.js +30 -0
  20. package/dist/lib/book/notebook.js.map +1 -0
  21. package/dist/lib/book/richChat.d.ts +36 -0
  22. package/dist/lib/book/richChat.js +87 -0
  23. package/dist/lib/book/richChat.js.map +1 -0
  24. package/dist/lib/book/storyboard.d.ts +125 -0
  25. package/dist/lib/book/storyboard.js +44 -0
  26. package/dist/lib/book/storyboard.js.map +1 -0
  27. package/dist/lib/layeredCanvas/dataModels/bubble.d.ts +96 -0
  28. package/dist/lib/layeredCanvas/dataModels/bubble.js +630 -0
  29. package/dist/lib/layeredCanvas/dataModels/bubble.js.map +1 -0
  30. package/dist/lib/layeredCanvas/dataModels/effect.d.ts +25 -0
  31. package/dist/lib/layeredCanvas/dataModels/effect.js +104 -0
  32. package/dist/lib/layeredCanvas/dataModels/effect.js.map +1 -0
  33. package/dist/lib/layeredCanvas/dataModels/film.d.ts +44 -0
  34. package/dist/lib/layeredCanvas/dataModels/film.js +172 -0
  35. package/dist/lib/layeredCanvas/dataModels/film.js.map +1 -0
  36. package/dist/lib/layeredCanvas/dataModels/frameTree.d.ts +99 -0
  37. package/dist/lib/layeredCanvas/dataModels/frameTree.js +861 -0
  38. package/dist/lib/layeredCanvas/dataModels/frameTree.js.map +1 -0
  39. package/dist/lib/layeredCanvas/dataModels/media.d.ts +39 -0
  40. package/dist/lib/layeredCanvas/dataModels/media.js +69 -0
  41. package/dist/lib/layeredCanvas/dataModels/media.js.map +1 -0
  42. package/dist/lib/layeredCanvas/layers/SampleLayer.d.ts +6 -0
  43. package/dist/lib/layeredCanvas/layers/SampleLayer.js +22 -0
  44. package/dist/lib/layeredCanvas/layers/SampleLayer.js.map +1 -0
  45. package/dist/lib/layeredCanvas/layers/arrayLayer.d.ts +49 -0
  46. package/dist/lib/layeredCanvas/layers/arrayLayer.js +364 -0
  47. package/dist/lib/layeredCanvas/layers/arrayLayer.js.map +1 -0
  48. package/dist/lib/layeredCanvas/layers/bubbleLayer.d.ts +97 -0
  49. package/dist/lib/layeredCanvas/layers/bubbleLayer.js +1418 -0
  50. package/dist/lib/layeredCanvas/layers/bubbleLayer.js.map +1 -0
  51. package/dist/lib/layeredCanvas/layers/floorLayer.d.ts +13 -0
  52. package/dist/lib/layeredCanvas/layers/floorLayer.js +64 -0
  53. package/dist/lib/layeredCanvas/layers/floorLayer.js.map +1 -0
  54. package/dist/lib/layeredCanvas/layers/frameLayer.d.ts +106 -0
  55. package/dist/lib/layeredCanvas/layers/frameLayer.js +1283 -0
  56. package/dist/lib/layeredCanvas/layers/frameLayer.js.map +1 -0
  57. package/dist/lib/layeredCanvas/layers/inlinePainterLayer.d.ts +33 -0
  58. package/dist/lib/layeredCanvas/layers/inlinePainterLayer.js +222 -0
  59. package/dist/lib/layeredCanvas/layers/inlinePainterLayer.js.map +1 -0
  60. package/dist/lib/layeredCanvas/layers/paperRendererLayer.d.ts +64 -0
  61. package/dist/lib/layeredCanvas/layers/paperRendererLayer.js +443 -0
  62. package/dist/lib/layeredCanvas/layers/paperRendererLayer.js.map +1 -0
  63. package/dist/lib/layeredCanvas/layers/undoLayer.d.ts +8 -0
  64. package/dist/lib/layeredCanvas/layers/undoLayer.js +24 -0
  65. package/dist/lib/layeredCanvas/layers/undoLayer.js.map +1 -0
  66. package/dist/lib/layeredCanvas/system/keyCache.d.ts +4 -0
  67. package/dist/lib/layeredCanvas/system/keyCache.js +61 -0
  68. package/dist/lib/layeredCanvas/system/keyCache.js.map +1 -0
  69. package/dist/lib/layeredCanvas/system/layeredCanvas.d.ts +172 -0
  70. package/dist/lib/layeredCanvas/system/layeredCanvas.js +597 -0
  71. package/dist/lib/layeredCanvas/system/layeredCanvas.js.map +1 -0
  72. package/dist/lib/layeredCanvas/system/paperArray.d.ts +29 -0
  73. package/dist/lib/layeredCanvas/system/paperArray.js +108 -0
  74. package/dist/lib/layeredCanvas/system/paperArray.js.map +1 -0
  75. package/dist/lib/layeredCanvas/tools/draw/bubbleGraphic.d.ts +7 -0
  76. package/dist/lib/layeredCanvas/tools/draw/bubbleGraphic.js +728 -0
  77. package/dist/lib/layeredCanvas/tools/draw/bubbleGraphic.js.map +1 -0
  78. package/dist/lib/layeredCanvas/tools/draw/clickableIcon.d.ts +42 -0
  79. package/dist/lib/layeredCanvas/tools/draw/clickableIcon.js +129 -0
  80. package/dist/lib/layeredCanvas/tools/draw/clickableIcon.js.map +1 -0
  81. package/dist/lib/layeredCanvas/tools/draw/drawFilmStack.d.ts +4 -0
  82. package/dist/lib/layeredCanvas/tools/draw/drawFilmStack.js +53 -0
  83. package/dist/lib/layeredCanvas/tools/draw/drawFilmStack.js.map +1 -0
  84. package/dist/lib/layeredCanvas/tools/draw/drawText.d.ts +8 -0
  85. package/dist/lib/layeredCanvas/tools/draw/drawText.js +45 -0
  86. package/dist/lib/layeredCanvas/tools/draw/drawText.js.map +1 -0
  87. package/dist/lib/layeredCanvas/tools/draw/richText.d.ts +15 -0
  88. package/dist/lib/layeredCanvas/tools/draw/richText.js +172 -0
  89. package/dist/lib/layeredCanvas/tools/draw/richText.js.map +1 -0
  90. package/dist/lib/layeredCanvas/tools/draw/selectionFrame.d.ts +5 -0
  91. package/dist/lib/layeredCanvas/tools/draw/selectionFrame.js +63 -0
  92. package/dist/lib/layeredCanvas/tools/draw/selectionFrame.js.map +1 -0
  93. package/dist/lib/layeredCanvas/tools/draw/typeSetting.d.ts +16 -0
  94. package/dist/lib/layeredCanvas/tools/draw/typeSetting.js +2 -0
  95. package/dist/lib/layeredCanvas/tools/draw/typeSetting.js.map +1 -0
  96. package/dist/lib/layeredCanvas/tools/draw/verticalText.d.ts +3 -0
  97. package/dist/lib/layeredCanvas/tools/draw/verticalText.js +230 -0
  98. package/dist/lib/layeredCanvas/tools/draw/verticalText.js.map +1 -0
  99. package/dist/lib/layeredCanvas/tools/focusKeeper.d.ts +8 -0
  100. package/dist/lib/layeredCanvas/tools/focusKeeper.js +15 -0
  101. package/dist/lib/layeredCanvas/tools/focusKeeper.js.map +1 -0
  102. package/dist/lib/layeredCanvas/tools/frameExamples.d.ts +382 -0
  103. package/dist/lib/layeredCanvas/tools/frameExamples.js +758 -0
  104. package/dist/lib/layeredCanvas/tools/frameExamples.js.map +1 -0
  105. package/dist/lib/layeredCanvas/tools/geometry/bubbleGeometry.d.ts +12 -0
  106. package/dist/lib/layeredCanvas/tools/geometry/bubbleGeometry.js +117 -0
  107. package/dist/lib/layeredCanvas/tools/geometry/bubbleGeometry.js.map +1 -0
  108. package/dist/lib/layeredCanvas/tools/geometry/convertPoint.d.ts +2 -0
  109. package/dist/lib/layeredCanvas/tools/geometry/convertPoint.js +25 -0
  110. package/dist/lib/layeredCanvas/tools/geometry/convertPoint.js.map +1 -0
  111. package/dist/lib/layeredCanvas/tools/geometry/geometry.d.ts +69 -0
  112. package/dist/lib/layeredCanvas/tools/geometry/geometry.js +408 -0
  113. package/dist/lib/layeredCanvas/tools/geometry/geometry.js.map +1 -0
  114. package/dist/lib/layeredCanvas/tools/geometry/geometry.vitest.d.ts +1 -0
  115. package/dist/lib/layeredCanvas/tools/geometry/geometry.vitest.js +58 -0
  116. package/dist/lib/layeredCanvas/tools/geometry/geometry.vitest.js.map +1 -0
  117. package/dist/lib/layeredCanvas/tools/geometry/quickHull.d.ts +10 -0
  118. package/dist/lib/layeredCanvas/tools/geometry/quickHull.js +91 -0
  119. package/dist/lib/layeredCanvas/tools/geometry/quickHull.js.map +1 -0
  120. package/dist/lib/layeredCanvas/tools/geometry/trapezoid.d.ts +18 -0
  121. package/dist/lib/layeredCanvas/tools/geometry/trapezoid.js +105 -0
  122. package/dist/lib/layeredCanvas/tools/geometry/trapezoid.js.map +1 -0
  123. package/dist/lib/layeredCanvas/tools/grid.d.ts +7 -0
  124. package/dist/lib/layeredCanvas/tools/grid.js +16 -0
  125. package/dist/lib/layeredCanvas/tools/grid.js.map +1 -0
  126. package/dist/lib/layeredCanvas/tools/haiku.d.ts +1 -0
  127. package/dist/lib/layeredCanvas/tools/haiku.js +17 -0
  128. package/dist/lib/layeredCanvas/tools/haiku.js.map +1 -0
  129. package/dist/lib/layeredCanvas/tools/imageUtil.d.ts +8 -0
  130. package/dist/lib/layeredCanvas/tools/imageUtil.js +58 -0
  131. package/dist/lib/layeredCanvas/tools/imageUtil.js.map +1 -0
  132. package/dist/lib/layeredCanvas/tools/kinsoku.d.ts +26 -0
  133. package/dist/lib/layeredCanvas/tools/kinsoku.js +124 -0
  134. package/dist/lib/layeredCanvas/tools/kinsoku.js.map +1 -0
  135. package/dist/lib/layeredCanvas/tools/misc.d.ts +25 -0
  136. package/dist/lib/layeredCanvas/tools/misc.js +46 -0
  137. package/dist/lib/layeredCanvas/tools/misc.js.map +1 -0
  138. package/dist/lib/layeredCanvas/tools/perfectFreehandUtil.d.ts +2 -0
  139. package/dist/lib/layeredCanvas/tools/perfectFreehandUtil.js +21 -0
  140. package/dist/lib/layeredCanvas/tools/perfectFreehandUtil.js.map +1 -0
  141. package/dist/lib/layeredCanvas/tools/pictureControl.d.ts +4 -0
  142. package/dist/lib/layeredCanvas/tools/pictureControl.js +24 -0
  143. package/dist/lib/layeredCanvas/tools/pictureControl.js.map +1 -0
  144. package/dist/lib/layeredCanvas/tools/rectHandle.d.ts +6 -0
  145. package/dist/lib/layeredCanvas/tools/rectHandle.js +17 -0
  146. package/dist/lib/layeredCanvas/tools/rectHandle.js.map +1 -0
  147. package/dist/tsconfig.tsbuildinfo +1 -0
  148. package/package.json +64 -0
@@ -0,0 +1,408 @@
1
+ export function add2D(v0, v1) {
2
+ return [v0[0] + v1[0], v0[1] + v1[1]];
3
+ }
4
+ export function subtract2D(v0, v1) {
5
+ return [v0[0] - v1[0], v0[1] - v1[1]];
6
+ }
7
+ export function scale2D(v, n) {
8
+ return [v[0] * n, v[1] * n];
9
+ }
10
+ export function multiply2D(v0, v1) {
11
+ return [v0[0] * v1[0], v0[1] * v1[1]];
12
+ }
13
+ export function dot2D(vectorA, vectorB) {
14
+ return vectorA[0] * vectorB[0] + vectorA[1] * vectorB[1];
15
+ }
16
+ export function cross2D(vectorA, vectorB) {
17
+ return vectorA[0] * vectorB[1] - vectorA[1] * vectorB[0];
18
+ }
19
+ export function magnitude2D(vector) {
20
+ return Math.hypot(...vector);
21
+ }
22
+ export function magnitudeSq2D(vector) {
23
+ return vector[0] * vector[0] + vector[1] * vector[1];
24
+ }
25
+ export function distance2D(v0, v1) {
26
+ return magnitude2D(subtract2D(v0, v1));
27
+ }
28
+ export function distanceSq2D(v0, v1) {
29
+ return magnitudeSq2D(subtract2D(v0, v1));
30
+ }
31
+ export function perpendicular2D(v, n = 1) {
32
+ const [x, y] = v;
33
+ return [-y * n, x * n];
34
+ }
35
+ export function reverse2D(v) {
36
+ return [-v[0], -v[1]];
37
+ }
38
+ export function normalize2D(v, n = 1) {
39
+ const [x, y] = v;
40
+ const l = Math.hypot(x, y);
41
+ if (l < 0.0001) {
42
+ return [0.0, 0.0];
43
+ }
44
+ return [n * x / l, n * y / l];
45
+ }
46
+ export function floor2D(v) {
47
+ return [Math.floor(v[0]), Math.floor(v[1])];
48
+ }
49
+ export function ceil2D(v) {
50
+ return [Math.ceil(v[0]), Math.ceil(v[1])];
51
+ }
52
+ export function round2D(v) {
53
+ return [Math.round(v[0]), Math.round(v[1])];
54
+ }
55
+ export function reciprocal2D(v) {
56
+ return [1 / v[0], 1 / v[1]];
57
+ }
58
+ export function projectionScalingFactor2D(a, b) {
59
+ return dot2D(a, b) / dot2D(b, b);
60
+ }
61
+ export function projection2D(a, b) {
62
+ const factor = projectionScalingFactor2D(a, b);
63
+ return [b[0] * factor, b[1] * factor];
64
+ }
65
+ export function signedAngle(lhs, rhs) {
66
+ return Math.atan2(cross2D(lhs, rhs), dot2D(lhs, rhs));
67
+ }
68
+ export function angleBetween(lhs, rhs) {
69
+ return Math.abs(signedAngle(lhs, rhs));
70
+ }
71
+ export function positiveAngle(lhs, rhs) {
72
+ const a = signedAngle(lhs, rhs);
73
+ return a < 0 ? a + Math.PI * 2 : a;
74
+ }
75
+ export function getSide(A, B, C, D) {
76
+ const BA = [A[0] - B[0], A[1] - B[1]];
77
+ const BD = [D[0] - B[0], D[1] - B[1]];
78
+ const BC = [C[0] - B[0], C[1] - B[1]];
79
+ const theta0 = positiveAngle(BA, BD);
80
+ const theta1 = positiveAngle(BA, BC);
81
+ if (theta0 === 0 || theta0 === theta1) {
82
+ return 0;
83
+ }
84
+ else if (theta0 < theta1) {
85
+ return 1;
86
+ }
87
+ else {
88
+ return -1;
89
+ }
90
+ }
91
+ export function slerp2D(ca, cb, t) {
92
+ const calen = magnitude2D(ca);
93
+ const cblen = magnitude2D(cb);
94
+ const lent = calen + (cblen - calen) * t;
95
+ const cq = [ca[0] * lent / calen, ca[1] * lent / calen];
96
+ const angle = signedAngle(ca, cb) * t;
97
+ const xt = cq[0] * Math.cos(angle) - cq[1] * Math.sin(angle);
98
+ const yt = cq[0] * Math.sin(angle) + cq[1] * Math.cos(angle);
99
+ return [xt, yt];
100
+ }
101
+ export function lerp2D(ca, cb, t) {
102
+ return [ca[0] + (cb[0] - ca[0]) * t, ca[1] + (cb[1] - ca[1]) * t];
103
+ }
104
+ export function normalizedAngle(angle) {
105
+ return (angle + Math.PI) % (2 * Math.PI) - Math.PI;
106
+ }
107
+ export function angleDifference(angle1, angle2) {
108
+ const phi = Math.abs(angle1 - angle2) % (Math.PI * 2);
109
+ return phi > Math.PI ? Math.PI * 2 - phi : phi;
110
+ }
111
+ export function superEllipsePoint2D(a, b, n, theta) {
112
+ const cosTheta = Math.cos(theta);
113
+ const sinTheta = Math.sin(theta);
114
+ const x = a * Math.sign(cosTheta) * Math.pow(Math.abs(cosTheta), 2 / n);
115
+ const y = b * Math.sign(sinTheta) * Math.pow(Math.abs(sinTheta), 2 / n);
116
+ return [x, y];
117
+ }
118
+ export function line(p1, p2, offset = [0, 0]) {
119
+ return [[p1[0] + offset[0], p1[1] + offset[1]], [p2[0] + offset[0], p2[1] + offset[1]]];
120
+ }
121
+ export function line2(p1, theta, offset = [0, 0]) {
122
+ const q = [p1[0] + offset[0], p1[1] + offset[1]];
123
+ return [q, [q[0] + Math.cos(theta), q[1] + Math.sin(theta)]];
124
+ }
125
+ export function lineIntersection(line1, line2) {
126
+ const [[x1, y1], [x2, y2]] = line1;
127
+ const [[x3, y3], [x4, y4]] = line2;
128
+ const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
129
+ if (denom === 0) {
130
+ return null;
131
+ }
132
+ const x = ((x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)) / denom;
133
+ const y = ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) / denom;
134
+ return [x, y];
135
+ }
136
+ export function deg2rad(deg) {
137
+ return deg * Math.PI / 180;
138
+ }
139
+ export function rad2deg(rad) {
140
+ return rad * 180 / Math.PI;
141
+ }
142
+ export function rotate2D(point, theta) {
143
+ const cosTheta = Math.cos(theta);
144
+ const sinTheta = Math.sin(theta);
145
+ return [point[0] * cosTheta - point[1] * sinTheta, point[0] * sinTheta + point[1] * cosTheta];
146
+ }
147
+ export function clamp(x, min = 0, max = 1) {
148
+ return Math.max(min, Math.min(max, x));
149
+ }
150
+ export function center2D(p0, p1) {
151
+ return [(p0[0] + p1[0]) * 0.5, (p0[1] + p1[1]) * 0.5];
152
+ }
153
+ export function isPointInTriangle(p, tri) {
154
+ const [p0, p1, p2] = tri;
155
+ const area2 = (p1[0] - p0[0]) * (p2[1] - p0[1]) -
156
+ (p1[1] - p0[1]) * (p2[0] - p0[0]);
157
+ if (area2 === 0) {
158
+ // 退化しているため、false を返す
159
+ return false;
160
+ }
161
+ const s = (p0[0] - p2[0]) * (p[1] - p2[1]) - (p0[1] - p2[1]) * (p[0] - p2[0]);
162
+ const t = (p1[0] - p0[0]) * (p[1] - p0[1]) - (p1[1] - p0[1]) * (p[0] - p0[0]);
163
+ if ((s < 0) !== (t < 0) && s !== 0 && t !== 0) {
164
+ return false;
165
+ }
166
+ const d = (p2[0] - p1[0]) * (p[1] - p1[1]) - (p2[1] - p1[1]) * (p[0] - p1[0]);
167
+ return d === 0 || (d < 0) === (s + t <= 0);
168
+ }
169
+ export function pointToLineDistance(p, line) {
170
+ const [a, b] = line;
171
+ const ab = subtract2D(b, a);
172
+ const ap = subtract2D(p, a);
173
+ const abLength = Math.hypot(ab[0], ab[1]);
174
+ // 線分がほぼゼロ長の場合、点aから点pへの距離を返す
175
+ if (abLength < 1e-10) {
176
+ return Math.hypot(ap[0], ap[1]);
177
+ }
178
+ // 外積を利用して距離を計算
179
+ const cross = Math.abs(ab[0] * ap[1] - ab[1] * ap[0]);
180
+ return cross / abLength;
181
+ }
182
+ export function pointToSegmentDistance(p, segment) {
183
+ const [a, b] = segment;
184
+ const ab = subtract2D(b, a);
185
+ const ap = subtract2D(p, a);
186
+ const abSquared = dot2D(ab, ab);
187
+ // 線分がほぼゼロ長の場合、点aから点pへの距離を返す
188
+ if (abSquared < 1e-10) {
189
+ return Math.hypot(ap[0], ap[1]);
190
+ }
191
+ // 投影係数 t を計算し、0から1にクランプする
192
+ const t = Math.max(0, Math.min(1, dot2D(ap, ab) / abSquared));
193
+ // 投影点の座標を計算
194
+ const projection = [a[0] + ab[0] * t, a[1] + ab[1] * t];
195
+ // 点pから投影点への距離を計算
196
+ return Math.hypot(p[0] - projection[0], p[1] - projection[1]);
197
+ }
198
+ export function pointToTriangleDistance(p, t, ignoresinverted = false) {
199
+ // 3点が同一直線上にある場合、点と直線の距離を返す
200
+ const colinear = getColinearLineSegment(t);
201
+ if (colinear) {
202
+ return pointToSegmentDistance(p, colinear);
203
+ }
204
+ // 三角形が反時計回りの場合、オプションによっては無視する
205
+ if (ignoresinverted && isTriangleCounterClockwise(t)) {
206
+ return Infinity;
207
+ }
208
+ // 三角形内部に点がある場合、0を返す
209
+ if (isPointInTriangle(p, t)) {
210
+ return 0;
211
+ }
212
+ // 最も近い辺までの距離を計算
213
+ const [A, B, C] = t;
214
+ const d0 = pointToSegmentDistance(p, [A, B]);
215
+ const d1 = pointToSegmentDistance(p, [B, C]);
216
+ const d2 = pointToSegmentDistance(p, [C, A]);
217
+ return Math.min(d0, d1, d2);
218
+ }
219
+ export function rectIntersectsRect(r0, r1) {
220
+ return r0[0] < r1[0] + r1[2] && r0[0] + r0[2] > r1[0] && r0[1] < r1[1] + r1[3] && r0[1] + r0[3] > r1[1];
221
+ }
222
+ export function rectContains(r, p) {
223
+ return p[0] >= r[0] && p[0] <= r[0] + r[2] && p[1] >= r[1] && p[1] <= r[1] + r[3];
224
+ }
225
+ export function rectToPointDistance(r, p) {
226
+ const [x, y] = p;
227
+ const [x0, y0, w, h] = r;
228
+ const [x1, y1] = [x0 + w, y0 + h];
229
+ var dx = Math.max(x0 - x, 0, x - x1);
230
+ var dy = Math.max(y0 - y, 0, y - y1);
231
+ return Math.sqrt(dx * dx + dy * dy);
232
+ }
233
+ export function rectToCorners(r) {
234
+ const [x, y, w, h] = r;
235
+ return [[x, y], [x + w, y], [x + w, y + h], [x, y + h]];
236
+ }
237
+ export function extendRect(r, n) {
238
+ return [r[0] - n, r[1] - n, r[2] + 2 * n, r[3] + 2 * n];
239
+ }
240
+ export function vectorEquals(v0, v1) {
241
+ return v0[0] === v1[0] && v0[1] === v1[1];
242
+ }
243
+ export function isVectorZero(v) {
244
+ return v[0] === 0 && v[1] === 0;
245
+ }
246
+ export function rect2Box(r) {
247
+ return [[r[0], r[1]], [r[0] + r[2], r[1] + r[3]]];
248
+ }
249
+ export function box2Rect(b) {
250
+ return [b[0][0], b[0][1], b[1][0] - b[0][0], b[1][1] - b[0][1]];
251
+ }
252
+ export function ensureMinRectSize(minSize, r) {
253
+ let mx, my;
254
+ if (typeof minSize === 'number') {
255
+ mx = my = minSize;
256
+ }
257
+ else {
258
+ [mx, my] = minSize;
259
+ }
260
+ let [x, y, w, h] = r;
261
+ const nw = Math.max(w, mx);
262
+ const nh = Math.max(h, my);
263
+ x = x + (w - nw) / 2;
264
+ y = y + (h - nh) / 2;
265
+ w = nw;
266
+ h = nh;
267
+ return [x, y, w, h];
268
+ }
269
+ // アスペクト比を変更しない移動量最小の最小外接矩形
270
+ export function computeConstraintedRect(targetRect, constraintRect) {
271
+ const [x0, y0, w, h] = constraintRect;
272
+ const [x1, y1] = [x0 + w, y0 + h];
273
+ const [_tx, _ty, tw, th] = targetRect;
274
+ const [opx, opy] = getRectCenter(targetRect);
275
+ const [cx, cy] = getRectCenter(constraintRect);
276
+ let scale = 1;
277
+ if (tw * scale < w) {
278
+ scale = w / tw;
279
+ }
280
+ if (th * scale < h) {
281
+ scale = h / th;
282
+ }
283
+ const [npx, npy] = [(opx - cx) * scale + cx, (opy - cy) * scale + cy];
284
+ const [nw, nh] = [tw * scale, th * scale];
285
+ const [nx0, ny0] = [npx - nw / 2, npy - nh / 2];
286
+ const [nx1, ny1] = [nx0 + nw, ny0 + nh];
287
+ let [mx, my] = [0, 0];
288
+ if (x0 < nx0) {
289
+ mx -= nx0 - x0;
290
+ }
291
+ if (y0 < ny0) {
292
+ my -= ny0 - y0;
293
+ }
294
+ if (nx1 < x1) {
295
+ mx += x1 - nx1;
296
+ }
297
+ if (ny1 < y1) {
298
+ my += y1 - ny1;
299
+ }
300
+ return { scale, translation: [mx / scale, my / scale] };
301
+ }
302
+ export function computeBoundingRectFromRects(rects) {
303
+ let [x0, y0, x1, y1] = [Infinity, Infinity, -Infinity, -Infinity];
304
+ for (const r of rects) {
305
+ const [x, y, w, h] = r;
306
+ x0 = Math.min(x0, x);
307
+ y0 = Math.min(y0, y);
308
+ x1 = Math.max(x1, x + w);
309
+ y1 = Math.max(y1, y + h);
310
+ }
311
+ return [x0, y0, x1 - x0, y1 - y0];
312
+ }
313
+ export function getRectCenter(r) {
314
+ return [r[0] + r[2] / 2, r[1] + r[3] / 2];
315
+ }
316
+ export function translateRect(r, v) {
317
+ return [r[0] + v[0], r[1] + v[1], r[2], r[3]];
318
+ }
319
+ export function scaleRect(r, s) {
320
+ return [r[0] * s, r[1] * s, r[2] * s, r[3] * s];
321
+ }
322
+ export function minimumBoundingScale(objectSize, containerSize) {
323
+ return Math.max(containerSize[0] / objectSize[0], containerSize[1] / objectSize[1]);
324
+ }
325
+ export function isTriangleClockwise([v0, v1, v2]) {
326
+ const cross = (v1[0] - v0[0]) * (v2[1] - v0[1]) - (v1[1] - v0[1]) * (v2[0] - v0[0]);
327
+ return 0 < cross; // Y軸が数学的座標系と逆のため
328
+ }
329
+ export function isTriangleCounterClockwise([v0, v1, v2]) {
330
+ const cross = (v1[0] - v0[0]) * (v2[1] - v0[1]) - (v1[1] - v0[1]) * (v2[0] - v0[0]);
331
+ return cross < 0; // Y軸が数学的座標系と逆のため
332
+ }
333
+ export function getColinearLineSegment(tri) {
334
+ const [p1, p2, p3] = tri;
335
+ function vectorNearlyEquals(v0, v1) {
336
+ return distanceSq2D(v0, v1) < 1e-10;
337
+ }
338
+ // 同一点の判定(結果が結局点になることもある)
339
+ if (vectorNearlyEquals(p1, p3)) {
340
+ return [p1, p2];
341
+ }
342
+ if (vectorNearlyEquals(p1, p2)) {
343
+ return [p2, p3];
344
+ }
345
+ if (vectorNearlyEquals(p2, p3)) {
346
+ return [p1, p3];
347
+ }
348
+ // ここまできたら3点すべて別
349
+ const [x1, y1] = p1;
350
+ const [x2, y2] = p2;
351
+ const [x3, y3] = p3;
352
+ if (1e-10 <= Math.abs((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1))) {
353
+ // 面積がある=直線ではない
354
+ return null;
355
+ }
356
+ const [dx, dy] = subtract2D(p3, p1);
357
+ const lengthSquared = magnitudeSq2D([dx, dy]); // すでに判定済みなので0でない
358
+ let t = ((x2 - x1) * dx + (y2 - y1) * dy) / lengthSquared;
359
+ if (t <= 0) {
360
+ return [p2, p3];
361
+ }
362
+ else if (t >= 1) {
363
+ return [p1, p2];
364
+ }
365
+ else {
366
+ return [p1, p3];
367
+ }
368
+ }
369
+ export function signed2DTriangleArea(a, b, c) {
370
+ return (a[0] - c[0]) * (b[1] - c[1]) - (a[1] - c[1]) * (b[0] - c[0]);
371
+ }
372
+ // ゲームプログラミングのためのリアルタイム衝突判定 p151
373
+ // ただしいくつかの境界条件を加味してrobustにした
374
+ export function testSegmentIntersection(s0, s1) {
375
+ const [a, b] = s0;
376
+ const [c, d] = s1;
377
+ const a1 = signed2DTriangleArea(a, b, d);
378
+ const a2 = signed2DTriangleArea(a, b, c);
379
+ // 修正点: < 0 を <= 0 に変更して端点での交差を許容
380
+ if (a1 * a2 <= 0) {
381
+ const a3 = signed2DTriangleArea(c, d, a);
382
+ const a4 = signed2DTriangleArea(c, d, b);
383
+ // 同様に < 0 を <= 0 に変更
384
+ if (a3 * a4 <= 0) {
385
+ const denominator = a1 - a2;
386
+ // denominator が 0 の場合、線分が平行または重なっている
387
+ if (denominator === 0) {
388
+ // 特殊ケースの処理(必要に応じて実装)
389
+ return null;
390
+ }
391
+ const t = a3 / denominator;
392
+ // t が 0 <= t <= 1 の範囲にあることを確認
393
+ if (t >= 0 && t <= 1) {
394
+ const p = lerp2D(a, b, t);
395
+ return [t, p];
396
+ }
397
+ }
398
+ }
399
+ return null;
400
+ }
401
+ export function segmentIntersection(s0, s1) {
402
+ const result = testSegmentIntersection(s0, s1);
403
+ return result ? result[1] : null;
404
+ }
405
+ export function denormalizePositionInRect(p, r) {
406
+ return [r[0] + r[2] * p[0], r[1] + r[3] * p[1]];
407
+ }
408
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../../../../src/lib/layeredCanvas/tools/geometry/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { testSegmentIntersection } from './geometry';
3
+ describe('segmentIntersection', () => {
4
+ it('should return null for parallel lines', () => {
5
+ const s0 = [[0, 0], [1, 1]];
6
+ const s1 = [[0, 1], [1, 2]];
7
+ expect(testSegmentIntersection(s0, s1)).toBeNull();
8
+ });
9
+ it('should return null for non-intersecting lines', () => {
10
+ const s0 = [[0, 0], [1, 0]];
11
+ const s1 = [[0, 1], [1, 1]];
12
+ expect(testSegmentIntersection(s0, s1)).toBeNull();
13
+ });
14
+ it('should return the correct intersection point for intersecting lines', () => {
15
+ const s0 = [[0, 0], [2, 2]];
16
+ const s1 = [[0, 2], [2, 0]];
17
+ const result = testSegmentIntersection(s0, s1);
18
+ expect(result).not.toBeNull();
19
+ if (result) {
20
+ const [t, p] = result;
21
+ expect(t).toBeCloseTo(0.5);
22
+ expect(p).toEqual([1, 1]);
23
+ }
24
+ });
25
+ it('should return null when the intersection point is outside the segments', () => {
26
+ const s0 = [[0, 0], [1, 1]];
27
+ const s1 = [[2, 2], [3, 3]];
28
+ expect(testSegmentIntersection(s0, s1)).toBeNull();
29
+ });
30
+ it('should handle vertical and horizontal lines correctly', () => {
31
+ const s0 = [[1, 0], [1, 2]];
32
+ const s1 = [[0, 1], [2, 1]];
33
+ const result = testSegmentIntersection(s0, s1);
34
+ expect(result).not.toBeNull();
35
+ if (result) {
36
+ const [t, p] = result;
37
+ expect(t).toBeCloseTo(0.5);
38
+ expect(p).toEqual([1, 1]);
39
+ }
40
+ });
41
+ it('should handle overlapping lines by returning null', () => {
42
+ const s0 = [[0, 0], [2, 2]];
43
+ const s1 = [[1, 1], [3, 3]];
44
+ expect(testSegmentIntersection(s0, s1)).toBeNull();
45
+ });
46
+ it('should handle endpoints touching as intersecting', () => {
47
+ const s0 = [[0, 0], [1, 1]];
48
+ const s1 = [[1, 1], [2, 0]];
49
+ const result = testSegmentIntersection(s0, s1);
50
+ expect(result).not.toBeNull();
51
+ if (result) {
52
+ const [t, p] = result;
53
+ expect(t).toBeCloseTo(1);
54
+ expect(p).toEqual([1, 1]);
55
+ }
56
+ });
57
+ });
58
+ //# sourceMappingURL=geometry.vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.vitest.js","sourceRoot":"","sources":["../../../../../src/lib/layeredCanvas/tools/geometry/geometry.vitest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * QuickHull.js
3
+ *
4
+ * Implementation of the QuickHull algorithm for finding convex hull of a set of points
5
+ *
6
+ * @author Clay Gulick
7
+ */
8
+ type Point = [number, number];
9
+ export declare function QuickHull(points: Point[]): Point[];
10
+ export {};
@@ -0,0 +1,91 @@
1
+ /**
2
+ * QuickHull.js
3
+ *
4
+ * Implementation of the QuickHull algorithm for finding convex hull of a set of points
5
+ *
6
+ * @author Clay Gulick
7
+ */
8
+ var hull = [];
9
+ export function QuickHull(points) {
10
+ hull = [];
11
+ //if there are only three points, this is a triangle, which by definition is already a hull
12
+ if (points.length == 3) {
13
+ points.push(points[0]); //close the poly
14
+ return points;
15
+ }
16
+ var baseline = getMinMaxPoints(points);
17
+ addSegments(baseline, points);
18
+ addSegments([baseline[1], baseline[0]], points); //reverse line direction to get points on other side
19
+ //add the last point to make a closed loop
20
+ hull.push(hull[0]);
21
+ return hull;
22
+ }
23
+ /**
24
+ * Return the min and max points in the set along the X axis
25
+ * Returns [ [x,y], [x,y] ]
26
+ * @param {Array} points - An array of {x,y} objects
27
+ */
28
+ function getMinMaxPoints(points) {
29
+ var i;
30
+ var minPoint;
31
+ var maxPoint;
32
+ minPoint = points[0];
33
+ maxPoint = points[0];
34
+ for (i = 1; i < points.length; i++) {
35
+ if (points[i][0] < minPoint[0])
36
+ minPoint = points[i];
37
+ if (points[i][0] > maxPoint[0])
38
+ maxPoint = points[i];
39
+ }
40
+ return [minPoint, maxPoint];
41
+ }
42
+ /**
43
+ * Calculates the distance of a point from a line
44
+ * @param {Array} point - Array [x,y]
45
+ * @param {Array} line - Array of two points [ [x1,y1], [x2,y2] ]
46
+ */
47
+ function distanceFromLine(point, line) {
48
+ var vY = line[1][1] - line[0][1];
49
+ var vX = line[0][0] - line[1][0];
50
+ return (vX * (point[1] - line[0][1]) + vY * (point[0] - line[0][0]));
51
+ }
52
+ /**
53
+ * Determines the set of points that lay outside the line (positive), and the most distal point
54
+ * Returns: {points: [ [x1, y1], ... ], max: [x,y] ]
55
+ * @param points
56
+ * @param line
57
+ */
58
+ function distalPoints(line, points) {
59
+ var i;
60
+ var outer_points = [];
61
+ var point;
62
+ var distal_point;
63
+ var distance = 0;
64
+ var max_distance = 0;
65
+ for (i = 0; i < points.length; i++) {
66
+ point = points[i];
67
+ distance = distanceFromLine(point, line);
68
+ if (distance > 0)
69
+ outer_points.push(point);
70
+ else
71
+ continue; //short circuit
72
+ if (distance > max_distance) {
73
+ distal_point = point;
74
+ max_distance = distance;
75
+ }
76
+ }
77
+ return { points: outer_points, max: distal_point };
78
+ }
79
+ /**
80
+ * Recursively adds hull segments
81
+ * @param line
82
+ * @param points
83
+ */
84
+ function addSegments(line, points) {
85
+ var distal = distalPoints(line, points);
86
+ if (!distal.max)
87
+ return hull.push(line[0]);
88
+ addSegments([line[0], distal.max], distal.points);
89
+ addSegments([distal.max, line[1]], distal.points);
90
+ }
91
+ //# sourceMappingURL=quickHull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickHull.js","sourceRoot":"","sources":["../../../../../src/lib/layeredCanvas/tools/geometry/quickHull.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,IAAI,IAAI,GAAY,EAAE,CAAC;AAEvB,MAAM,UAAU,SAAS,CAAC,MAAe;IACvC,IAAI,GAAG,EAAE,CAAC;IACV,2FAA2F;IAC3F,IAAG,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,oDAAoD;IACrG,0CAA0C;IAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAe;IACvC,IAAI,CAAS,CAAC;IACd,IAAI,QAAe,CAAC;IACpB,IAAI,QAAe,CAAC;IAEpB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAErB,KAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAC5B,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAC5B,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAY,EAAE,IAAoB;IAC3D,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAoB,EAAE,MAAe;IAC1D,IAAI,CAAS,CAAC;IACd,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,KAAY,CAAC;IACjB,IAAI,YAAmB,CAAC;IACxB,IAAI,QAAQ,GAAC,CAAC,CAAC;IACf,IAAI,YAAY,GAAC,CAAC,CAAC;IAEnB,KAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAC,IAAI,CAAC,CAAC;QAExC,IAAG,QAAQ,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACrC,SAAS,CAAC,eAAe;QAE9B,IAAG,QAAQ,GAAG,YAAY,EAAE,CAAC;YAC5B,YAAY,GAAG,KAAK,CAAC;YACrB,YAAY,GAAG,QAAQ,CAAC;QACzB,CAAC;IAEF,CAAC;IAED,OAAO,EAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAa,EAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAoB,EAAE,MAAe;IACzD,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAG,CAAC,MAAM,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Vector, Rect } from "./geometry";
2
+ export type Trapezoid = {
3
+ topLeft: Vector;
4
+ topRight: Vector;
5
+ bottomLeft: Vector;
6
+ bottomRight: Vector;
7
+ };
8
+ export type TrapezoidCorner = "topLeft" | "topRight" | "bottomLeft" | "bottomRight";
9
+ export declare const trapezoidCorners: readonly ["topLeft", "topRight", "bottomLeft", "bottomRight"];
10
+ export declare function trapezoidPath(ctx: CanvasRenderingContext2D, corners: Trapezoid): void;
11
+ export declare function extendTrapezoid(t: Trapezoid, x: number, y: number): Trapezoid;
12
+ export declare function rectToTrapezoid(r: Rect): Trapezoid;
13
+ export declare function trapezoidBoundingRect(corners: Trapezoid): Rect;
14
+ export declare function trapezoidCenter(corners: Trapezoid): Vector;
15
+ export declare function isPointInTrapezoid(p: Vector, t: Trapezoid): boolean;
16
+ export declare function isPointInQuadrilateral(p: Vector, t: Trapezoid): boolean;
17
+ export declare function pointToQuadrilateralDistance(p: Vector, t: Trapezoid, ignoresinverted: boolean): number;
18
+ export declare function isQuadrilateralConvex(t: Trapezoid): boolean;