@inglorious/engine 0.1.0 → 0.2.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 (292) hide show
  1. package/README.md +39 -36
  2. package/package.json +20 -33
  3. package/src/engine/ai/movement/dynamic/align.js +63 -63
  4. package/src/engine/ai/movement/dynamic/arrive.js +42 -43
  5. package/src/engine/ai/movement/dynamic/evade.js +38 -38
  6. package/src/engine/ai/movement/dynamic/face.js +19 -20
  7. package/src/engine/ai/movement/dynamic/flee.js +45 -45
  8. package/src/engine/ai/movement/dynamic/look-where-youre-going.js +16 -17
  9. package/src/engine/ai/movement/dynamic/match-velocity.js +51 -50
  10. package/src/engine/ai/movement/dynamic/pursue.js +38 -38
  11. package/src/engine/ai/movement/dynamic/seek.js +44 -44
  12. package/src/engine/ai/movement/dynamic/wander.js +31 -32
  13. package/src/engine/ai/movement/kinematic/align.js +37 -37
  14. package/src/engine/ai/movement/kinematic/arrive.js +42 -42
  15. package/src/engine/ai/movement/kinematic/face.js +19 -20
  16. package/src/engine/ai/movement/kinematic/flee.js +26 -26
  17. package/src/engine/ai/movement/kinematic/seek.js +26 -26
  18. package/src/engine/ai/movement/kinematic/seek.test.js +42 -42
  19. package/src/engine/ai/movement/kinematic/wander-as-seek.js +31 -31
  20. package/src/engine/ai/movement/kinematic/wander.js +27 -27
  21. package/src/engine/animation/sprite.js +101 -0
  22. package/src/engine/animation/ticker.js +38 -0
  23. package/src/engine/behaviors/camera.js +68 -0
  24. package/src/engine/behaviors/controls/dynamic/modern.js +76 -0
  25. package/src/engine/behaviors/controls/dynamic/shooter.js +84 -0
  26. package/src/engine/behaviors/controls/dynamic/tank.js +69 -0
  27. package/src/engine/behaviors/controls/event-handlers.js +17 -0
  28. package/src/engine/behaviors/controls/kinematic/modern.js +76 -0
  29. package/src/engine/behaviors/controls/kinematic/shooter.js +82 -0
  30. package/src/engine/behaviors/controls/kinematic/tank.js +67 -0
  31. package/src/engine/behaviors/debug/collision.js +35 -0
  32. package/src/engine/behaviors/fps.js +29 -0
  33. package/src/engine/behaviors/fsm.js +33 -0
  34. package/src/{game/decorators → engine/behaviors}/fsm.test.js +49 -56
  35. package/src/engine/behaviors/game.js +15 -0
  36. package/src/engine/behaviors/input/controls.js +37 -0
  37. package/src/engine/behaviors/input/gamepad.js +114 -0
  38. package/src/engine/behaviors/input/input.js +48 -0
  39. package/src/engine/behaviors/input/keyboard.js +64 -0
  40. package/src/engine/behaviors/input/mouse.js +91 -0
  41. package/src/engine/behaviors/physics/bouncy.js +25 -0
  42. package/src/engine/behaviors/physics/clamped.js +36 -0
  43. package/src/{game/decorators/collisions.js → engine/behaviors/physics/collidable.js} +20 -24
  44. package/src/engine/behaviors/physics/jumpable.js +145 -0
  45. package/src/engine/behaviors/ui/button.js +17 -0
  46. package/src/engine/collision/detection.js +110 -115
  47. package/src/engine/core/api.js +34 -0
  48. package/src/engine/core/dev-tools.js +135 -0
  49. package/src/engine/core/engine.js +119 -0
  50. package/src/engine/core/loop.js +15 -0
  51. package/src/engine/{loop → core/loops}/animation-frame.js +25 -26
  52. package/src/engine/{loop → core/loops}/elapsed.js +22 -23
  53. package/src/engine/{loop → core/loops}/fixed.js +27 -28
  54. package/src/engine/{loop → core/loops}/flash.js +13 -14
  55. package/src/engine/{loop → core/loops}/lag.js +26 -27
  56. package/src/engine/core/select.js +26 -0
  57. package/src/engine/core/store.js +178 -0
  58. package/src/engine/core/store.test.js +110 -0
  59. package/src/engine/movement/dynamic/modern.js +21 -24
  60. package/src/engine/movement/dynamic/tank.js +43 -43
  61. package/src/engine/movement/kinematic/modern.js +16 -16
  62. package/src/engine/movement/kinematic/modern.test.js +27 -27
  63. package/src/engine/movement/kinematic/tank.js +27 -27
  64. package/src/engine/physics/bounds.js +138 -0
  65. package/src/engine/physics/position.js +43 -0
  66. package/src/engine/physics/position.test.js +80 -0
  67. package/src/engine/systems/sprite-animation.js +27 -0
  68. package/src/main.js +10 -5
  69. package/src/renderers/canvas/absolute-position.js +18 -0
  70. package/src/renderers/canvas/camera.js +13 -0
  71. package/src/renderers/canvas/canvas-renderer.js +68 -0
  72. package/src/{ui → renderers}/canvas/character.js +38 -35
  73. package/src/{ui → renderers}/canvas/form/button.js +25 -25
  74. package/src/{ui → renderers}/canvas/fps.js +18 -18
  75. package/src/renderers/canvas/image/hitmask.js +51 -0
  76. package/src/{ui → renderers}/canvas/image/image.js +34 -37
  77. package/src/{ui → renderers}/canvas/image/sprite.js +49 -49
  78. package/src/{ui → renderers}/canvas/image/tilemap.js +66 -64
  79. package/src/{ui → renderers}/canvas/mouse.js +37 -37
  80. package/src/renderers/canvas/rendering-system.js +79 -0
  81. package/src/{ui → renderers}/canvas/shapes/circle.js +29 -31
  82. package/src/{ui → renderers}/canvas/shapes/rectangle.js +27 -31
  83. package/src/renderers/react/game/character/index.jsx +20 -0
  84. package/src/{ui → renderers}/react/game/cursor/index.jsx +20 -20
  85. package/src/{ui → renderers}/react/game/form/fields/field/index.jsx +56 -56
  86. package/src/{ui → renderers}/react/game/form/fields/index.jsx +12 -12
  87. package/src/{ui → renderers}/react/game/form/index.jsx +22 -22
  88. package/src/{ui → renderers}/react/game/fps/index.jsx +16 -16
  89. package/src/{ui → renderers}/react/game/game.jsx +72 -71
  90. package/src/{ui → renderers}/react/game/index.jsx +29 -29
  91. package/src/{ui → renderers}/react/game/platform/index.jsx +30 -30
  92. package/src/{ui → renderers}/react/game/scene/index.jsx +27 -25
  93. package/src/{ui → renderers}/react/game/sprite/index.jsx +60 -58
  94. package/src/{ui → renderers}/react/game/stats/index.jsx +22 -22
  95. package/src/{ui → renderers}/react/hocs/with-absolute-position/index.jsx +20 -20
  96. package/src/{ui → renderers}/react/index.jsx +9 -9
  97. package/src/utils/algorithms/decision-tree.js +24 -24
  98. package/src/utils/algorithms/decision-tree.test.js +153 -102
  99. package/src/utils/algorithms/path-finding.js +155 -155
  100. package/src/utils/algorithms/path-finding.test.js +151 -151
  101. package/src/utils/data-structures/array.js +83 -83
  102. package/src/utils/data-structures/array.test.js +173 -173
  103. package/src/utils/data-structures/board.js +159 -159
  104. package/src/utils/data-structures/board.test.js +242 -242
  105. package/src/utils/data-structures/boolean.js +9 -9
  106. package/src/utils/data-structures/heap.js +164 -164
  107. package/src/utils/data-structures/heap.test.js +103 -103
  108. package/src/utils/data-structures/object.js +138 -102
  109. package/src/utils/data-structures/object.test.js +218 -121
  110. package/src/utils/data-structures/objects.js +66 -48
  111. package/src/utils/data-structures/objects.test.js +99 -99
  112. package/src/utils/data-structures/tree.js +36 -36
  113. package/src/utils/data-structures/tree.test.js +33 -33
  114. package/src/utils/functions/functions.js +19 -19
  115. package/src/utils/functions/functions.test.js +23 -23
  116. package/src/utils/math/geometry/circle.js +70 -117
  117. package/src/utils/math/geometry/circle.test.js +97 -97
  118. package/src/utils/math/geometry/hitmask.js +70 -39
  119. package/src/utils/math/geometry/hitmask.test.js +155 -84
  120. package/src/utils/math/geometry/line.js +35 -35
  121. package/src/utils/math/geometry/line.test.js +49 -49
  122. package/src/utils/math/geometry/point.js +78 -71
  123. package/src/utils/math/geometry/point.test.js +81 -81
  124. package/src/utils/math/geometry/rectangle.js +76 -45
  125. package/src/utils/math/geometry/rectangle.test.js +42 -42
  126. package/src/utils/math/geometry/segment.js +80 -80
  127. package/src/utils/math/geometry/segment.test.js +183 -183
  128. package/src/utils/math/geometry/triangle.js +15 -15
  129. package/src/utils/math/geometry/triangle.test.js +11 -11
  130. package/src/utils/math/linear-algebra/2d.js +28 -28
  131. package/src/utils/math/linear-algebra/2d.test.js +17 -17
  132. package/src/utils/math/linear-algebra/quaternion.js +22 -22
  133. package/src/utils/math/linear-algebra/quaternion.test.js +25 -25
  134. package/src/utils/math/linear-algebra/quaternions.js +20 -20
  135. package/src/utils/math/linear-algebra/quaternions.test.js +29 -29
  136. package/src/utils/math/linear-algebra/vector.js +327 -302
  137. package/src/utils/math/linear-algebra/vector.test.js +265 -257
  138. package/src/utils/math/linear-algebra/vectors.js +122 -122
  139. package/src/utils/math/linear-algebra/vectors.test.js +65 -65
  140. package/src/utils/math/linear-interpolation.js +9 -0
  141. package/src/utils/math/numbers.js +90 -90
  142. package/src/utils/math/numbers.test.js +137 -137
  143. package/src/utils/math/rng.js +44 -44
  144. package/src/utils/math/rng.test.js +39 -39
  145. package/src/utils/math/statistics.js +43 -43
  146. package/src/utils/math/statistics.test.js +47 -47
  147. package/src/utils/math/trigonometry.js +89 -89
  148. package/src/utils/math/trigonometry.test.js +52 -52
  149. package/src/utils/physics/acceleration.js +61 -63
  150. package/src/utils/physics/friction.js +28 -30
  151. package/src/utils/physics/friction.test.js +42 -44
  152. package/src/utils/physics/gravity.js +69 -71
  153. package/src/utils/physics/gravity.test.js +77 -80
  154. package/src/utils/physics/jump.js +31 -41
  155. package/src/utils/physics/velocity.js +36 -38
  156. package/src/docs/ai/movement/dynamic/align.js +0 -131
  157. package/src/docs/ai/movement/dynamic/arrive.js +0 -88
  158. package/src/docs/ai/movement/dynamic/dynamic.mdx +0 -99
  159. package/src/docs/ai/movement/dynamic/dynamic.stories.js +0 -58
  160. package/src/docs/ai/movement/dynamic/evade.js +0 -72
  161. package/src/docs/ai/movement/dynamic/face.js +0 -90
  162. package/src/docs/ai/movement/dynamic/flee.js +0 -38
  163. package/src/docs/ai/movement/dynamic/look-where-youre-going.js +0 -114
  164. package/src/docs/ai/movement/dynamic/match-velocity.js +0 -92
  165. package/src/docs/ai/movement/dynamic/pursue.js +0 -72
  166. package/src/docs/ai/movement/dynamic/seek.js +0 -37
  167. package/src/docs/ai/movement/dynamic/wander.js +0 -71
  168. package/src/docs/ai/movement/kinematic/align.js +0 -122
  169. package/src/docs/ai/movement/kinematic/arrive.js +0 -78
  170. package/src/docs/ai/movement/kinematic/face.js +0 -82
  171. package/src/docs/ai/movement/kinematic/flee.js +0 -36
  172. package/src/docs/ai/movement/kinematic/kinematic.mdx +0 -67
  173. package/src/docs/ai/movement/kinematic/kinematic.stories.js +0 -42
  174. package/src/docs/ai/movement/kinematic/seek.js +0 -34
  175. package/src/docs/ai/movement/kinematic/wander-as-seek.js +0 -62
  176. package/src/docs/ai/movement/kinematic/wander.js +0 -28
  177. package/src/docs/bounds.js +0 -7
  178. package/src/docs/code-reuse.js +0 -35
  179. package/src/docs/collision/circles.js +0 -58
  180. package/src/docs/collision/collision.mdx +0 -27
  181. package/src/docs/collision/collision.stories.js +0 -22
  182. package/src/docs/collision/platform.js +0 -76
  183. package/src/docs/collision/tilemap.js +0 -181
  184. package/src/docs/empty.js +0 -1
  185. package/src/docs/engine.mdx +0 -81
  186. package/src/docs/engine.stories.js +0 -37
  187. package/src/docs/event-handlers.js +0 -68
  188. package/src/docs/framerate.js +0 -37
  189. package/src/docs/game.jsx +0 -15
  190. package/src/docs/image/image.js +0 -19
  191. package/src/docs/image/image.stories.js +0 -22
  192. package/src/docs/image/sprite.js +0 -39
  193. package/src/docs/image/tilemap.js +0 -84
  194. package/src/docs/input/controls.js +0 -67
  195. package/src/docs/input/gamepad.js +0 -67
  196. package/src/docs/input/input.mdx +0 -55
  197. package/src/docs/input/input.stories.js +0 -27
  198. package/src/docs/input/keyboard.js +0 -58
  199. package/src/docs/input/mouse.js +0 -32
  200. package/src/docs/instances.js +0 -49
  201. package/src/docs/player/dynamic/double-jump.js +0 -90
  202. package/src/docs/player/dynamic/dynamic.stories.js +0 -32
  203. package/src/docs/player/dynamic/jump.js +0 -83
  204. package/src/docs/player/dynamic/modern-controls.js +0 -57
  205. package/src/docs/player/dynamic/shooter-controls.js +0 -51
  206. package/src/docs/player/dynamic/tank-controls.js +0 -44
  207. package/src/docs/player/kinematic/double-jump.js +0 -90
  208. package/src/docs/player/kinematic/jump.js +0 -82
  209. package/src/docs/player/kinematic/kinematic.stories.js +0 -32
  210. package/src/docs/player/kinematic/modern-controls.js +0 -56
  211. package/src/docs/player/kinematic/shooter-controls.js +0 -48
  212. package/src/docs/player/kinematic/tank-controls.js +0 -42
  213. package/src/docs/quick-start/first-game.js +0 -49
  214. package/src/docs/quick-start/hello-world.js +0 -1
  215. package/src/docs/quick-start.mdx +0 -127
  216. package/src/docs/quick-start.stories.js +0 -17
  217. package/src/docs/recipes/add-and-remove.js +0 -71
  218. package/src/docs/recipes/add-instance.js +0 -42
  219. package/src/docs/recipes/decision-tree.js +0 -169
  220. package/src/docs/recipes/random-instances.js +0 -25
  221. package/src/docs/recipes/recipes.mdx +0 -81
  222. package/src/docs/recipes/recipes.stories.js +0 -37
  223. package/src/docs/recipes/remove-instance.js +0 -52
  224. package/src/docs/recipes/states.js +0 -64
  225. package/src/docs/ui/button.js +0 -28
  226. package/src/docs/ui/form.stories.js +0 -55
  227. package/src/docs/ui-chooser.jsx +0 -6
  228. package/src/docs/utils/data-structures/object.mdx +0 -47
  229. package/src/docs/utils/data-structures/objects.mdx +0 -30
  230. package/src/docs/utils/functions/functions.mdx +0 -34
  231. package/src/docs/utils/math/geometry/circle.mdx +0 -55
  232. package/src/docs/utils/math/geometry/point.mdx +0 -38
  233. package/src/docs/utils/math/geometry/rectangle.mdx +0 -24
  234. package/src/docs/utils/math/geometry/segment.mdx +0 -55
  235. package/src/docs/utils/math/geometry/triangle.mdx +0 -22
  236. package/src/docs/utils/math/linear-algebra/2d.mdx +0 -22
  237. package/src/docs/utils/math/linear-algebra/quaternion.mdx +0 -21
  238. package/src/docs/utils/math/linear-algebra/quaternions.mdx +0 -22
  239. package/src/docs/utils/math/linear-algebra/vector.mdx +0 -177
  240. package/src/docs/utils/math/linear-algebra/vectors.mdx +0 -58
  241. package/src/docs/utils/math/numbers.mdx +0 -76
  242. package/src/docs/utils/math/random.mdx +0 -35
  243. package/src/docs/utils/math/statistics.mdx +0 -38
  244. package/src/docs/utils/math/trigonometry.mdx +0 -85
  245. package/src/docs/utils/physics/friction.mdx +0 -20
  246. package/src/docs/utils/physics/gravity.mdx +0 -28
  247. package/src/engine/loop.js +0 -15
  248. package/src/engine/store.js +0 -174
  249. package/src/engine/store.test.js +0 -256
  250. package/src/engine.js +0 -74
  251. package/src/game/animation.js +0 -26
  252. package/src/game/bounds.js +0 -66
  253. package/src/game/decorators/character.js +0 -5
  254. package/src/game/decorators/clamp-to-bounds.js +0 -15
  255. package/src/game/decorators/controls/dynamic/modern.js +0 -48
  256. package/src/game/decorators/controls/dynamic/shooter.js +0 -47
  257. package/src/game/decorators/controls/dynamic/tank.js +0 -55
  258. package/src/game/decorators/controls/kinematic/modern.js +0 -49
  259. package/src/game/decorators/controls/kinematic/shooter.js +0 -45
  260. package/src/game/decorators/controls/kinematic/tank.js +0 -52
  261. package/src/game/decorators/debug/collisions.js +0 -32
  262. package/src/game/decorators/double-jump.js +0 -70
  263. package/src/game/decorators/fps.js +0 -30
  264. package/src/game/decorators/fsm.js +0 -27
  265. package/src/game/decorators/game.js +0 -11
  266. package/src/game/decorators/image/image.js +0 -5
  267. package/src/game/decorators/image/sprite.js +0 -5
  268. package/src/game/decorators/image/tilemap.js +0 -5
  269. package/src/game/decorators/input/controls.js +0 -27
  270. package/src/game/decorators/input/gamepad.js +0 -74
  271. package/src/game/decorators/input/input.js +0 -41
  272. package/src/game/decorators/input/keyboard.js +0 -49
  273. package/src/game/decorators/input/mouse.js +0 -65
  274. package/src/game/decorators/jump.js +0 -72
  275. package/src/game/decorators/platform.js +0 -5
  276. package/src/game/decorators/ui/button.js +0 -21
  277. package/src/game/sprite.js +0 -119
  278. package/src/ui/canvas/absolute-position.js +0 -17
  279. package/src/ui/canvas/image/hitmask.js +0 -37
  280. package/src/ui/canvas.js +0 -81
  281. package/src/ui/react/game/character/index.jsx +0 -30
  282. package/src/utils/math/geometry/platform.js +0 -42
  283. package/src/utils/math/geometry/platform.test.js +0 -133
  284. /package/src/{ui → renderers}/react/game/character/character.module.scss +0 -0
  285. /package/src/{ui → renderers}/react/game/cursor/cursor.module.scss +0 -0
  286. /package/src/{ui → renderers}/react/game/form/fields/field/field.module.scss +0 -0
  287. /package/src/{ui → renderers}/react/game/form/fields/fields.module.scss +0 -0
  288. /package/src/{ui → renderers}/react/game/form/form.module.scss +0 -0
  289. /package/src/{ui → renderers}/react/game/platform/platform.module.scss +0 -0
  290. /package/src/{ui → renderers}/react/game/scene/scene.module.scss +0 -0
  291. /package/src/{ui → renderers}/react/game/sprite/sprite.module.css +0 -0
  292. /package/src/{ui → renderers}/react/hocs/with-absolute-position/with-absolute-position.module.scss +0 -0
@@ -1,30 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { extend, merge } from '@inglorious/utils/data-structures/objects'
4
- import { toString } from '@inglorious/utils/data-structures/object'
5
-
6
- <Meta title="Utils/Data Structures/Objects" />
7
-
8
- # Objects
9
-
10
- Functions that deal with multiple object.
11
-
12
- ## Extend
13
-
14
- Extends an object with another, producing a new object as a result.
15
-
16
- <code>const obj1 = \{ a: 1, b: [2, 3], c: \{ d: 4 \}, e: [\{ f: 5 \}] \}</code>&nbsp;
17
-
18
- <code>const obj2 = \{ g: 6, b: [7], c: \{ h: 8 \}, e: [\{ i: 9 \}] \}</code>&nbsp;
19
-
20
- <code>extend(obj1, obj2) == {toString(extend({ a: 1, b: [2, 3], c: { d: 4 }, e: [{ f: 5 }] }, { g: 6, b: [7], c: { h: 8 }, e: [{ i: 9 }] }))}</code>&nbsp;
21
-
22
- ## Merge
23
-
24
- Performs a deep merge between multiple objects, changing the first object in place.
25
-
26
- <code>const obj1 = \{ a: 1, b: [2, 3], c: \{ d: 4 \}, e: [\{ f: 5 \}] \}</code>&nbsp;
27
-
28
- <code>const obj2 = \{ g: 6, b: [7], c: \{ h: 8 \}, e: [\{ i: 9 \}] \}</code>&nbsp;
29
-
30
- <code>merge(obj1, obj2) == {toString(merge({ a: 1, b: [2, 3], c: { d: 4 }, e: [{ f: 5 }] }, { g: 6, b: [7], c: { h: 8 }, e: [{ i: 9 }] }))}</code>&nbsp;
@@ -1,34 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { compose, pipe } from '@inglorious/utils/functions/functions'
4
- import { toString } from '@inglorious/utils/data-structures/object'
5
-
6
- <Meta title="Utils/Functions/Functions" />
7
-
8
- # Functions
9
-
10
- Basic functions that deal with ...functions.
11
-
12
- ## Compose
13
-
14
- Implements function composition, which expects functions to wrap each other.
15
-
16
- <code>const shout = (x) => x.toUpperCase()</code>&nbsp;
17
-
18
- <code>const punctuate = (mark) => (x) => \`$\{x\}$\{mark\}\`</code>&nbsp;
19
-
20
- <code>const html = (tag) => (x) => \`\<$\{tag\}>$\{x\}\</$\{tag\}>\`</code>&nbsp;
21
-
22
- <code>compose(html('p'), punctuate('!'), shout)("Hello world") == {toString(compose((x) => `<${"p"}>${x}</${"p"}>`, (x) => `${x}${"!"}`, (x) => x.toUpperCase())("Hello world"))}</code>&nbsp;
23
-
24
- ## Pipe
25
-
26
- Implements function piping, which functions to be processed one after the other in order.
27
-
28
- <code>const shout = (x) => x.toUpperCase()</code>&nbsp;
29
-
30
- <code>const punctuate = (mark) => (x) => \`$\{x\}$\{mark\}\`</code>&nbsp;
31
-
32
- <code>const html = (tag) => (x) => \`\<$\{tag\}>$\{x\}\</$\{tag\}>\`</code>&nbsp;
33
-
34
- <code>pipe(shout, punctuate('!'), html('p'))("Hello world") == {toString(pipe((x) => x.toUpperCase(), ((mark) => (x) => `${x}${mark}`)("!"), ((tag) => (x) => `<${tag}>${x}</${tag}>`)("p"))("Hello world"))}</code>&nbsp;
@@ -1,55 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { intersectsCircle, intersectsPlatform, intersectsPoint, intersectsRectangle } from '@inglorious/utils/math/geometry/circle.js'
5
-
6
- <Meta title="Utils/Math/Geometry/Circle" />
7
-
8
- # Circle
9
-
10
- Intersection functions for a circle.
11
-
12
- ## Intersects Point
13
-
14
- Checks if a circle intersects with a point.
15
-
16
- <code>intersectsPoint(\{ position: [1, 1, 0], radius: 1 }, [1.5, 1.5, 0]) == {toString(intersectsPoint({ position: [1, 1, 0], radius: 1 }, [1.5, 1.5, 0]))}</code>&nbsp;
17
-
18
-
19
- ## Intersects Circle
20
-
21
- Checks if a circle intersects with another circle.
22
-
23
- <code>intersectsCircle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [1, 1, 0], radius: 1 \}) == {toString(intersectsCircle({ position: [1, 1, 0], radius: 1 }, { position: [1, 1, 0], radius: 1 }))}</code>&nbsp;
24
-
25
- <code>intersectsCircle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [2, 1, 0], radius: 1 \}) == {toString(intersectsCircle({ position: [1, 1, 0], radius: 1 }, { position: [2, 1, 0], radius: 1 }))}</code>&nbsp;
26
-
27
- <code>intersectsCircle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [3, 1, 0], radius: 1 \}) == {toString(intersectsCircle({ position: [1, 1, 0], radius: 1 }, { position: [3, 1, 0], radius: 1 }))}</code>&nbsp;
28
-
29
- <code>intersectsCircle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [4, 1, 0], radius: 1 \}) == {toString(intersectsCircle({ position: [1, 1, 0], radius: 1 }, { position: [4, 1, 0], radius: 1 }))}</code>&nbsp;
30
-
31
- ## Intersects Rectangle
32
-
33
- Checks if a circle intersects with a rectangle.
34
-
35
- <code>intersectsRectangle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [-1, -1, 0], size: [4, 4, 0] \}) == {toString(intersectsRectangle({ position: [1, 1, 0], radius: 1 }, { position: [-1, -1, 0], size: [4, 4, 0] }))}</code>&nbsp;
36
-
37
- <code>intersectsRectangle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [-2, 0, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle({ position: [1, 1, 0], radius: 1 }, { position: [-2, 0, 0], size: [2, 2, 0] }))}</code>&nbsp;
38
-
39
- <code>intersectsRectangle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [-1, -1, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle({ position: [1, 1, 0], radius: 1 }, { position: [-1, -1, 0], size: [2, 2, 0] }))}</code>&nbsp;
40
-
41
- <code>intersectsRectangle(\{ position: [1, 1, 0], radius: 1 }, \{ position: [-3, 0, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle({ position: [1, 1, 0], radius: 1 }, { position: [-3, 0, 0], size: [2, 2, 0] }))}</code>&nbsp;
42
-
43
- ## Intersects Platform
44
-
45
- Checks if a circle intersects with a platform.
46
-
47
- <code>intersectsPlatform(\{ position: [1, 0, 1], radius: 1 }, \{ position: [-1, 0, 0], size: [2, 1] \}) == {toString(intersectsPlatform({ position: [1, 1, 0], radius: 1 }, { position: [-1, 0, 0], size: [2, 1, 0] }))}</code>&nbsp;
48
-
49
- <code>intersectsPlatform(\{ position: [1, 0, 1], radius: 1 }, \{ position: [0, 0, -2], size: [2, 1] \}) == {toString(intersectsPlatform({ position: [1, 1, 0], radius: 1 }, { position: [0, -1, ], size: [2, 1, 0] }))}</code>&nbsp;
50
-
51
- <code>intersectsPlatform(\{ position: [1, 0, 1], radius: 1 }, \{ position: [-1, 0, -1], size: [2, 2] \}) == {toString(intersectsPlatform({ position: [1, 1, 0], radius: 1 }, { position: [-1, -1, 0], size: [2, 2, 0] }))}</code>&nbsp;
52
-
53
- <code>intersectsPlatform(\{ position: [1, 0, 1], radius: 1 }, \{ position: [0, 0, 2], size: [2, 1] \}) == {toString(intersectsPlatform({ position: [1, 1, 0], radius: 1 }, { position: [0, 2, 0], size: [2, 1, 0] }))}</code>&nbsp;
54
-
55
- <code>intersectsPlatform(\{ position: [1, 0, 1], radius: 1 }, \{ position: [-3, 0, -1], size: [2, 1] \}) == {toString(intersectsPlatform({ position: [1, 1, 0], radius: 1 }, { position: [-3, -1, 0], size: [2, 1, 0] }))}</code>&nbsp;
@@ -1,38 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { intersectsPoint, intersectsCircle, intersectsRectangle } from '@inglorious/utils/math/geometry/point.js'
5
-
6
- <Meta title="Utils/Math/Geometry/Point" />
7
-
8
- # Point
9
-
10
- Intersection functions for a point.
11
-
12
- ## Intersects Point
13
-
14
- Checks if a point is in the same place as another.
15
-
16
- <code>intersectsPoint([1.5, 1.5, 0], [1.5, 1.5, 0]) == {toString(intersectsPoint([1.5, 1.5, 0], [1.5, 1.5, 0]))}</code>&nbsp;
17
-
18
- <code>intersectsPoint([1.5, 1.5, 0], [2, 1, 0]) == {toString(intersectsPoint([1.5, 1.5, 0], [2, 1, 0]))}</code>&nbsp;
19
-
20
- ## Intersects Circle
21
-
22
- Checks if a point is inside of a circle.
23
-
24
- <code>intersectsCircle([1.5, 1.5, 0], \{ position: [1, 1, 0], radius: 1 \}) == {toString(intersectsCircle([1.5, 1.5, 0], { position: [1, 1, 0], radius: 1 }))}</code>&nbsp;
25
-
26
- <code>intersectsCircle([2, 1, 0], \{ position: [1, 1, 0], radius: 1 \}) == {toString(intersectsCircle([2, 1, 0], { position: [1, 1, 0], radius: 1 }))}</code>&nbsp;
27
-
28
- <code>intersectsCircle([2, 2, 0], \{ position: [1, 1, 0], radius: 1 \}) == {toString(intersectsCircle([2, 2, 0], { position: [1, 1, 0], radius: 1 }))}</code>&nbsp;
29
-
30
- ## Intersects Rectangle
31
-
32
- Checks if a point is inside of a rectangle.
33
-
34
- <code>intersectsRectangle([1.5, 1.5, 0], \{ position: [1, 1, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle([1.5, 1.5, 0], { position: [1, 1, 0], size: [2, 2, 0] }))}</code>&nbsp;
35
-
36
- <code>intersectsRectangle([2, 1, 0], \{ position: [1, 1, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle([2, 1, 0], { position: [1, 1, 0], size: [2, 2, 0] }))}</code>&nbsp;
37
-
38
- <code>intersectsRectangle([2.5, 2.5, 0], \{ position: [1, 1, 0], size: [2, 2, 0] \}) == {toString(intersectsRectangle([2.5, 2.5, 0], { position: [1, 1, 0], size: [2, 2, 0] }))}</code>&nbsp;
@@ -1,24 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { intersectsPlatform } from '@inglorious/utils/math/geometry/rectangle.js'
5
-
6
- <Meta title="Utils/Math/Geometry/Rectangle" />
7
-
8
- # Rectangle
9
-
10
- Intersection functions for a rectangle.
11
-
12
- ## Intersects Platform
13
-
14
- Checks if a rectangle intersects with a platform.
15
-
16
- <code>intersectsPlatform(\{ position: [0, 0, 0], size: [2, 2, 0] }, \{ position: [0, -1, 0], size: [2, 2, 0] \}) == {toString(intersectsPlatform({ position: [0, 0, 0], size: [2, 2, 0] }, { position: [0, -1, 0], size: [2, 2, 0] }))}</code>&nbsp;
17
-
18
- <code>intersectsPlatform(\{ position: [0, 0, 0], size: [2, 2, 0] }, \{ position: [0, -2, 0], size: [2, 2, 0] \}) == {toString(intersectsPlatform({ position: [0, 0, 0], size: [2, 2, 0] }, { position: [0, -2, 0], size: [2, 2, 0] }))}</code>&nbsp;
19
-
20
- <code>intersectsPlatform(\{ position: [0, 0, 0], size: [2, 2, 0] }, \{ position: [0, 1, 0], size: [2, 2, 0] \}) == {toString(intersectsPlatform({ position: [0, 0, 0], size: [2, 2, 0] }, { position: [0, 1, 0], size: [2, 2, 0] }))}</code>&nbsp;
21
-
22
- <code>intersectsPlatform(\{ position: [0, 0, 0], size: [2, 2, 0] }, \{ position: [0, -3, 0], size: [2, 2, 0] \}) == {toString(intersectsPlatform({ position: [0, 0, 0], size: [2, 2, 0] }, { position: [0, -3, 0], size: [2, 2, 0] }))}</code>&nbsp;
23
-
24
- <code>intersectsPlatform(\{ position: [0, 0, 0], size: [2, 2, 0] }, \{ position: [-3, 0, 0], size: [2, 2, 0] \}) == {toString(intersectsPlatform({ position: [0, 0, 0], size: [2, 2, 0] }, { position: [-3, 0, 0], size: [2, 2, 0] }))}</code>&nbsp;
@@ -1,55 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { toString as vToString } from '@inglorious/utils/math/linear-algebra/vector.js'
5
- import { coefficients, distanceFromPoint, intersectsCircle } from '@inglorious/utils/math/geometry/segment.js'
6
-
7
- <Meta title="Utils/Math/Geometry/Segment" />
8
-
9
- # Segment
10
-
11
- Utility functions for line segments.
12
-
13
- ## Coefficients
14
-
15
- Retrieves values of *a*, *b*, and *c* from a segment, so it looks like a line in the form *ax + by + c = 0*.
16
-
17
- <code>coefficients(\{ from: [0, 0, 0], to: [2, 0, 1] \}) == {vToString(coefficients({ from: [0, 0, 0], to: [2, 0, 1] }))}</code>&nbsp;
18
-
19
- ## Distance from point
20
-
21
- Computes the distance between a segment and a point.
22
-
23
- <code>distanceFromPoint(\{ from: [0, 0, 0], to: [3, 0, 4] \}, [5, 0, 0]) == {distanceFromPoint({ from: [0, 0, 0], to: [3, 0, 4] }, [5, 0, 0])}</code>&nbsp;
24
-
25
- If the point rests on the segment, it will return zero.
26
-
27
- <code>distanceFromPoint(\{ from: [0, 0, 0], to: [2, 0, 2] \}, [1, 0, 1]) == {distanceFromPoint({ from: [0, 0, 0], to: [2, 0, 2] }, [1, 0, 1]).toFixed(0)}</code>&nbsp;
28
-
29
- If the point does not project on the segment, returns the distance between the point and the closest end of the segment.
30
-
31
- <code>distanceFromPoint(\{ from: [0, 0, 0], to: [3, 0, 4] \}, [-2, 0, 0]) == {distanceFromPoint({ from: [0, 0, 0], to: [3, 0, 4] }, [-2, 0, 0])}</code>&nbsp;
32
-
33
- <code>distanceFromPoint(\{ from: [0, 0, 0], to: [3, 0, 4] \}, [5, 0, 4]) == {distanceFromPoint({ from: [0, 0, 0], to: [3, 0, 4] }, [5, 0, 4])}</code>&nbsp;
34
-
35
- ## Intersects circle
36
-
37
- Checks if a segment overlaps with a circle.
38
-
39
- <code>intersectsCircle(\{ from: [0, 0, 0], to: [2, 0, 2] \}, \{ position: [1, 0, 1], radius: 1 \}) == {toString(intersectsCircle({ from: [0, 0, 0], to: [2, 0, 2] }, { position: [1, 0, 1], radius: 1 }))}</code>&nbsp;
40
-
41
- A segment tangent to the circle is considered to be intersecting with it.
42
-
43
- <code>intersectsCircle(\{ from: [0, 0, 0], to: [0, 0, 2] \}, \{ position: [1, 0, 1], radius: 1 \}) == {toString(intersectsCircle({ from: [0, 0, 0], to: [0, 0, 2] }, { position: [1, 0, 1], radius: 1 }))}</code>&nbsp;
44
-
45
- A segment resting inside of the circle is considered to be intersecting with it.
46
-
47
- <code>intersectsCircle(\{ from: [0.5, 0, 0.5], to: [1.5, 0, 1.5] \}, \{ position: [1, 0, 1], radius: 1 \}) == {toString(intersectsCircle({ from: [0.5, 0, 0.5], to: [1.5, 0, 1.5] }, { position: [1, 0, 1], radius: 1 }))}</code>&nbsp;
48
-
49
- A segment that does not cross a circle does not intersect with it.
50
-
51
- <code>intersectsCircle(\{ from: [0, 0, 0], to: [-2, 0, -2] \}, \{ position: [1, 0, 1], radius: 1 \}) == {toString(intersectsCircle({ from: [0, 0, 0], to: [-2, 0, 2] }, { position: [1, 0, 1], radius: 1 }))}</code>&nbsp;
52
-
53
- A segment is different from a line: even if its continuation would cross the circle, the segment itself does not.
54
-
55
- <code>intersectsCircle(\{ from: [0, 0, 0], to: [-1, 0, -2] \}, \{ position: [1, 0, 1], radius: 1 \}) == {toString(intersectsCircle({ from: [0, 0, 0], to: [-1, 0, 2] }, { position: [1, 0, 1], radius: 1 }))}</code>&nbsp;
@@ -1,22 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { hypothenuse, pythagoras } from '@inglorious/utils/math/geometry/triangle.js'
5
-
6
- <Meta title="Utils/Math/Geometry/Triangle" />
7
-
8
- # Triangle
9
-
10
- Basic triangle geometry functions.
11
-
12
- ## Hypothenuse
13
-
14
- Uses Pythagora's theorem to calculate the hypothenuse of a right triangle (alias `pythagoras`).
15
-
16
- <code>hypothenuse(3, 4) == {hypothenuse(3, 4)}</code>&nbsp;
17
-
18
- ## Pythagoras
19
-
20
- Alias of `hypothenuse`.
21
-
22
- <code>pythagoras(3, 4) == {pythagoras(3, 4)}</code>&nbsp;
@@ -1,22 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { from2D, to2D } from '@inglorious/utils/math/linear-algebra/2d'
4
- import { toString } from '@inglorious/utils/math/linear-algebra/vector'
5
-
6
- <Meta title="Utils/Math/Linear Algebra/2D" />
7
-
8
- # 2D
9
-
10
- Functions to convert any vector to 2D and viceversa.
11
-
12
- ## From 2D
13
-
14
- Builds a 3D vector from a 2D one.
15
-
16
- <code>from2D([3, 4]) == {toString(from2D([3, 4]))}</code>&nbsp;
17
-
18
- ## To 2D
19
-
20
- Builds a 2D vector from a 3D one.
21
-
22
- <code>to2D([3, 0, 4]) == {toString(to2D([3, 0, 4]))}</code>&nbsp;
@@ -1,21 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { quaternion } from '@inglorious/utils/math/linear-algebra/quaternion'
4
- import { toString } from '@inglorious/utils/math/linear-algebra/vector'
5
- import { pi } from '@inglorious/utils/math/trigonometry'
6
-
7
- <Meta title="Utils/Math/Linear Algebra/Quaternion" />
8
-
9
- # Quaternion
10
-
11
- Functions to deal with a single quaternion.
12
-
13
- ## Quaternion
14
-
15
- Creates a quaternion from any angle.
16
-
17
- <code>quaternion(0) == {toString(quaternion(0))}</code>&nbsp;
18
-
19
- <code>quaternion(pi() / 2) == {toString(quaternion(pi() / 2), 3)}</code> (&asymp;[cos(&pi;/4), 0, sin(&pi;/4), 0])
20
-
21
- <code>quaternion(-pi() / 2) == {toString(quaternion(-pi() / 2), 3)}</code> (&asymp;[cos(-&pi;/4), 0, sin(-&pi;/4), 0])
@@ -1,22 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { combine } from '@inglorious/utils/math/linear-algebra/quaternions'
4
- import { quaternion } from '@inglorious/utils/math/linear-algebra/quaternion'
5
- import { toString } from '@inglorious/utils/math/linear-algebra/vector'
6
- import { pi } from '@inglorious/utils/math/trigonometry'
7
-
8
- <Meta title="Utils/Math/Linear Algebra/Quaternions" />
9
-
10
- # Quaternions
11
-
12
- Functions that deal with multiple quaternions.
13
-
14
- ## Combine
15
-
16
- Multiplies two quaternions together. The algorithm used is the second approach described in [Wikipedia](https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Used_methods).
17
-
18
- <code>combine(quaternion(0), quaternion(0)) == {toString(combine(quaternion(0), quaternion(0)))}</code>&nbsp;
19
-
20
- <code>combine(quaternion(0), quaternion(pi() / 2)) == {toString(combine(quaternion(0), quaternion(pi() / 2)), 3)}</code> (&asymp;[cos(&pi;/4), 0, sin(&pi;/4), 0])
21
-
22
- <code>combine(quaternion(pi() / 2), quaternion(pi() / 2)) == {toString(combine(quaternion(pi() / 2), quaternion(pi() / 2)))}</code>&nbsp;
@@ -1,177 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import {
4
- angle,
5
- clamp,
6
- conjugate,
7
- divide,
8
- fromAngle,
9
- magnitude,
10
- mod,
11
- multiply,
12
- normalize,
13
- rotate,
14
- setAngle,
15
- setMagnitude,
16
- shift,
17
- toCartesian,
18
- toCylindrical,
19
- toPolar,
20
- toString,
21
- unit,
22
- } from '@inglorious/utils/math/linear-algebra/vector'
23
- import { pi, cos, sin } from '@inglorious/utils/math/trigonometry'
24
-
25
- <Meta title="Utils/Math/Linear Algebra/Vector" />
26
-
27
- # Vector
28
-
29
- Functions that deal with a single vector.
30
-
31
- ## Angle
32
-
33
- Returns the angle of a vector, calculated as the `atan2` between the last and first coordinate.
34
-
35
- <code>angle([1, 1]) == {angle([1, 1]).toFixed(3)}</code> (&asymp;&pi;/4)
36
-
37
- <code>angle([1, 0, 1]) == {angle([1, 0, 1]).toFixed(3)}</code> (&asymp;&pi;/4)
38
-
39
- ## Clamp
40
-
41
- Limits the magnitude of a vector to a lower and upper bound.
42
-
43
- <code>clamp([6, 8], 0, 5) == {toString(clamp([6, 8], 0, 5))}</code>&nbsp;
44
-
45
- <code>clamp([3, 4], 0, 5) == {toString(clamp([3, 4], 0, 5))}</code>&nbsp;
46
-
47
- Bounds can be specified as other vectors too.
48
-
49
- <code>clamp([6, 8], [0, 0], [3, 4]) == {toString(clamp([6, 8], [0, 0], [3, 4]))}</code>&nbsp;
50
-
51
- ## Conjugate
52
-
53
- Flips the sign of all coordinates except the first one.
54
-
55
- <code>conjugate([1, 2, 3]) == {toString(conjugate([1, 2, 3]))}</code>&nbsp;
56
-
57
- ## Divide
58
-
59
- Divides any vector by a scalar.
60
-
61
- <code>divide([4, 8, 12], 4) == {toString(divide([4, 8, 12], 4))}</code>&nbsp;
62
-
63
- ## From Angle
64
-
65
- Creates a 3D unit vector from a given angle.
66
-
67
- <code>fromAngle(pi() / 4) == {toString(fromAngle(pi() / 4))}</code>&nbsp;
68
-
69
- ## Length
70
-
71
- Alias of `magnitude`.
72
-
73
- ## Magnitude
74
-
75
- Computes the magnitude of any vector (alias `length`).
76
-
77
- <code>magnitude([3, 4]) == {magnitude([3, 4])}</code>&nbsp;
78
-
79
- ## Mod
80
-
81
- Applies the `mod` operator on any vector (alias `remainder`).
82
-
83
- <code>mod([10, 12, -18], 12) == {toString(mod([10, 12, -18], 12))}</code>&nbsp;
84
-
85
- ## Multiply
86
-
87
- Multiplies a vector with a scalar (alias `times`).
88
-
89
- <code>multiply([1, 2, 3], 4) == {toString(multiply([1, 2, 3], 4))}</code>&nbsp;
90
-
91
- ## Normalize
92
-
93
- Gives the vector unit length while maintaining its angle.
94
-
95
- <code>normalize([3, 4]) == {toString(normalize([3, 4]), 1)}</code>&nbsp;
96
-
97
- <code>normalize([-3, -4]) == {toString(normalize([-3, -4]), 1)}</code>&nbsp;
98
-
99
- ## Remainder
100
-
101
- Alias of `mod`.
102
-
103
- ## Rotate
104
-
105
- Adds the given angle to a 2D or 3D vector using quaternions.
106
-
107
- <code>rotate([1, 0], 0) == {toString(rotate([1, 0], 0))}</code>&nbsp;
108
-
109
- <code>rotate([1, 0], pi() / 4) == {toString(rotate([1, 0], pi() / 4), 3)}</code> (&asymp;[cos(&pi;/4), sin(&pi;/4)])
110
-
111
- <code>rotate([1, 0, 0], 0) == {toString(rotate([1, 0, 0], 0))}</code>&nbsp;
112
-
113
- <code>rotate([1, 0, 0], pi() / 4) == {toString(rotate([1, 0, 0], pi() / 4), 3)}</code> (&asymp;[cos(&pi;/4), 0, sin(&pi;/4)])
114
-
115
- <code>rotate([-1, 0, 0], pi() / 4) == {toString(rotate([-1, 0, 0], pi() / 4), 3)}</code> (&asymp;[cos(-3/4*&pi;), 0, sin(-3/4*&pi;)])
116
-
117
- ## Set Angle
118
-
119
- Changes the angle of a vector.
120
-
121
- <code>setAngle([cos(pi() / 4), 0, sin(pi() / 4)], pi() / 2) == {toString(setAngle([cos(pi() / 4), 0, sin(pi() / 4)], pi() / 2))}</code>&nbsp;
122
-
123
- ## Set Magnitude
124
-
125
- Changes the magnitude of any vector, keeping its angle.
126
-
127
- <code>setMagnitude([3, 4], 10) == {toString(setMagnitude([3, 4], 10))}</code>&nbsp;
128
-
129
- <code>setMagnitude([-3, -4], 10) == {toString(setMagnitude([-3, -4], 10))}</code>&nbsp;
130
-
131
- ## Shift
132
-
133
- Moves coordinates around by a certain index.
134
-
135
- <code>shift([1, 2, 3, 4, 5], 2) == {toString(shift([1, 2, 3, 4, 5], 2))}</code>&nbsp;
136
-
137
- ## Times
138
-
139
- Alias of `multiply`.
140
-
141
- ## To Cartesian
142
-
143
- Converts a 2D polar vector into cartesian coordinates.
144
-
145
- <code>toCartesian([2 ** 0.5, pi() / 4]) == {toString(toCartesian([2 ** 0.5, pi() / 4]))}</code>&nbsp;
146
-
147
- ## To Cylindrical
148
-
149
- Converts a 3D cartesian vector to cylindrical coordinates.
150
-
151
- <code>toCylindrical([1, 1, 1]) == {toString(toCylindrical([1, 1, 1]), 3)}</code>&nbsp;
152
-
153
- ## To Polar
154
-
155
- Converts a 2D cartesian vector to polar coordinates.
156
-
157
- <code>toPolar([1, 1]) == {toString(toPolar([1, 1]))}</code> (&asymp;[&#8730;2, &pi;/4])
158
-
159
- ## To Spherical
160
-
161
- TBD
162
-
163
- ## To String
164
-
165
- Returns a string representation of any vector, up to optional decimal points.
166
-
167
- <code>toString([1, 0]) == "{toString([1, 0])}"</code>&nbsp;
168
-
169
- <code>toString([cos(pi() / 4), 0], 3) == "{toString([cos(pi() / 4), 0], 3)}"</code>&nbsp;
170
-
171
- ## Unit
172
-
173
- Returns a unit 3D vector at a given optional angle.
174
-
175
- <code>unit() == {toString(unit())}</code>&nbsp;
176
-
177
- <code>unit(pi() / 2) == {toString(unit(pi() / 2))}</code>&nbsp;
@@ -1,58 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import {
4
- cross,
5
- dot,
6
- scalarProduct,
7
- subtract,
8
- sum,
9
- vectorProduct,
10
- } from '@inglorious/utils/math/linear-algebra/vectors'
11
- import { toString } from '@inglorious/utils/math/linear-algebra/vector'
12
- import { pi, cos, sin } from '@inglorious/utils/math/trigonometry'
13
-
14
- <Meta title="Utils/Math/Linear Algebra/Vectors" />
15
-
16
- # Vectors
17
-
18
- Functions that deal with a multiple vectors.
19
-
20
- ## Cross
21
-
22
- Performs the cross product between multiple vectors (alias `vectorProduct`).
23
-
24
- <code>cross([1, 2, 3], [4, 5, 6]) == {toString(cross([1, 2, 3], [4, 5, 6]))}</code>&nbsp;
25
-
26
- <code>cross([1, 2, 3], [4, 5, 6], [7, 8, 9]) == {toString(cross([1, 2, 3], [4, 5, 6], [7, 8, 9]))}</code>&nbsp;
27
-
28
- ## Dot
29
-
30
- Performs the dot product between multiple vectors (alias `scalarProduct`).
31
-
32
- <code>dot([1, 2, 3], [4, 5, 6]) == {dot([1, 2, 3], [4, 5, 6])}</code>&nbsp;
33
-
34
- <code>dot([1, 2, 3], [4, 5, 6], [7, 8, 9]) == {dot([1, 2, 3], [4, 5, 6], [7, 8, 9])}</code>&nbsp;
35
-
36
- ## Scalar Product
37
-
38
- Alias of `dot`.
39
-
40
- ## Subtract
41
-
42
- Subtracts all other vectors from the first one.
43
-
44
- <code>subtract([1, 2, 3], [4, 5, 6]) == {toString(subtract([1, 2, 3], [4, 5, 6]))}</code>&nbsp;
45
-
46
- <code>subtract([1, 2, 3], [4, 5, 6], [7, 8, 9]) == {toString(subtract([1, 2, 3], [4, 5, 6], [7, 8, 9]))}</code>&nbsp;
47
-
48
- ## Sum
49
-
50
- Sums all coordinates together.
51
-
52
- <code>sum([1, 2, 3], [4, 5, 6]) == {toString(sum([1, 2, 3], [4, 5, 6]))}</code>&nbsp;
53
-
54
- <code>sum([1, 2, 3], [4, 5, 6], [7, 8, 9]) == {toString(sum([1, 2, 3], [4, 5, 6], [7, 8, 9]))}</code>&nbsp;
55
-
56
- ## Vector Product
57
-
58
- Alias of `cross`.
@@ -1,76 +0,0 @@
1
- import { Meta } from '@storybook/blocks'
2
-
3
- import { toString } from '@inglorious/utils/data-structures/boolean.js'
4
- import { abs, clamp, isClose, mod, sign, sqrt } from '@inglorious/utils/math/numbers.js'
5
-
6
- <Meta title="Utils/Math/Numbers" />
7
-
8
- # Numbers
9
-
10
- Basic functions that deal with numbers.
11
-
12
- ## Abs
13
-
14
- Returns the absolute value of any number.
15
-
16
- <code>abs(42) == {abs(42)}</code>&nbsp;
17
-
18
- <code>abs(-42) == {abs(-42)}</code>&nbsp;
19
-
20
- ## Clamp
21
-
22
- Limits the given number to the specified bounds.
23
-
24
- <code>clamp(42, 0, 100) == {clamp(42, 0, 100)}</code>&nbsp;
25
-
26
- <code>clamp(-42, 0, 100) == {clamp(-42, 0, 100)}</code>&nbsp;
27
-
28
- <code>clamp(142, 0, 100) == {clamp(142, 0, 100)}</code>&nbsp;
29
-
30
- ## Is Close
31
-
32
- Checks if two numbers are close to each other, given some tolerance (which is *0.1* by default).
33
-
34
- <code>isClose(42, 42.1, 0.2) == {toString(isClose(42, 42.1, 0.2))}</code>&nbsp;
35
-
36
- <code>isClose(42, 43, 0.2) == {toString(isClose(42, 43, 0.2))}</code>&nbsp;
37
-
38
- <code>isClose(42, 42.1) == {toString(isClose(42, 42.1))}</code>&nbsp;
39
-
40
- ## Mod
41
-
42
- Computes the remainder of the integer division, always giving a positive value (alias `remainder`).
43
-
44
- <code>mod(2, 2) == {mod(2, 2)}</code>&nbsp;
45
-
46
- <code>mod(3, 2) == {mod(3, 2)}</code>&nbsp;
47
-
48
- <code>mod(-3, 2) == {mod(-3, 2)}</code>&nbsp;
49
-
50
- <code>mod(5 / 4, 1) == {mod(5 / 4, 1)}</code> (=1/4)&nbsp;
51
-
52
- <code>mod(5 / 4, 1) == {mod(5 / 4, 1)}</code> (=1/4)&nbsp;
53
-
54
- <code>mod(13 / 4, 1) == {mod(13 / 4, 1)}</code> (=1/4)&nbsp;
55
-
56
- <code>mod(-5 / 4, 1) == {mod(-5 / 4, 1)}</code> (=3/4)&nbsp;
57
-
58
- ## Remainder
59
-
60
- Alias of `mod`.
61
-
62
- ## Sign
63
-
64
- Returns +1 if the given number is positive, -1 if negative, 0 otherwise.
65
-
66
- <code>sign(42) == {sign(42)}</code>&nbsp;
67
-
68
- <code>sign(-42) == {sign(-42)}</code>&nbsp;
69
-
70
- <code>sign(0) == {sign(0)}</code>&nbsp;
71
-
72
- ## Sqrt
73
-
74
- Return the square roo of the given number.
75
-
76
- <code>sqrt(9) == {sqrt(9)}</code>&nbsp;