redscript-mc 3.0.1 → 3.0.2

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 (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,543 @@
1
+ # Linalg
2
+
3
+ > 本文档由 `src/stdlib/linalg.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [vec2d_dot](#vec2d-dot)
8
+ - [vec2d_length](#vec2d-length)
9
+ - [vec2d_dist](#vec2d-dist)
10
+ - [vec2d_normalize_x](#vec2d-normalize-x)
11
+ - [vec2d_normalize_y](#vec2d-normalize-y)
12
+ - [vec3d_dot](#vec3d-dot)
13
+ - [vec3d_length](#vec3d-length)
14
+ - [vec3d_dist](#vec3d-dist)
15
+ - [vec3d_cross_x](#vec3d-cross-x)
16
+ - [vec3d_cross_y](#vec3d-cross-y)
17
+ - [vec3d_cross_z](#vec3d-cross-z)
18
+ - [vec3d_normalize_x](#vec3d-normalize-x)
19
+ - [vec3d_normalize_y](#vec3d-normalize-y)
20
+ - [vec3d_normalize_z](#vec3d-normalize-z)
21
+ - [mat2d_det](#mat2d-det)
22
+ - [mat2d_mul_r0c0](#mat2d-mul-r0c0)
23
+ - [mat2d_mul_r0c1](#mat2d-mul-r0c1)
24
+ - [mat2d_mul_r1c0](#mat2d-mul-r1c0)
25
+ - [mat2d_mul_r1c1](#mat2d-mul-r1c1)
26
+ - [mat2d_vecmul_x](#mat2d-vecmul-x)
27
+ - [mat2d_vecmul_y](#mat2d-vecmul-y)
28
+ - [solve2d_x](#solve2d-x)
29
+ - [solve2d_y](#solve2d-y)
30
+
31
+ ---
32
+
33
+ ## `vec2d_dot` <Badge type="info" text="v2.0.0" />
34
+
35
+ 两个二维向量的点积
36
+
37
+ ```redscript
38
+ fn vec2d_dot(ax: double, ay: double, bx: double, by: double): double
39
+ ```
40
+
41
+ **参数**
42
+
43
+ | 参数 | 说明 |
44
+ |------|------|
45
+ | `ax` | 向量 A 的 X 分量 |
46
+ | `ay` | 向量 A 的 Y 分量 |
47
+ | `bx` | 向量 B 的 X 分量 |
48
+ | `by` | 向量 B 的 Y 分量 |
49
+
50
+ **返回:** ax*bx + ay*by
51
+
52
+ **示例**
53
+
54
+ ```redscript
55
+ let d: double = vec2d_dot(1.0d, 0.0d, 0.0d, 1.0d)
56
+ ```
57
+
58
+ ---
59
+
60
+ ## `vec2d_length` <Badge type="info" text="v2.0.0" />
61
+
62
+ 二维向量的欧几里得长度
63
+
64
+ ```redscript
65
+ fn vec2d_length(x: double, y: double): double
66
+ ```
67
+
68
+ **参数**
69
+
70
+ | 参数 | 说明 |
71
+ |------|------|
72
+ | `x` | X 分量 |
73
+ | `y` | Y 分量 |
74
+
75
+ **返回:** sqrt(x² + y²)
76
+
77
+ **示例**
78
+
79
+ ```redscript
80
+ let len: double = vec2d_length(3.0d, 4.0d)
81
+ ```
82
+
83
+ ---
84
+
85
+ ## `vec2d_dist` <Badge type="info" text="v2.0.0" />
86
+
87
+ 两个二维点之间的欧几里得距离
88
+
89
+ ```redscript
90
+ fn vec2d_dist(ax: double, ay: double, bx: double, by: double): double
91
+ ```
92
+
93
+ **参数**
94
+
95
+ | 参数 | 说明 |
96
+ |------|------|
97
+ | `ax` | 点 A 的 X 坐标 |
98
+ | `ay` | 点 A 的 Y 坐标 |
99
+ | `bx` | 点 B 的 X 坐标 |
100
+ | `by` | 点 B 的 Y 坐标 |
101
+
102
+ **返回:** sqrt((ax-bx)² + (ay-by)²)
103
+
104
+ **示例**
105
+
106
+ ```redscript
107
+ let dist: double = vec2d_dist(0.0d, 0.0d, 3.0d, 4.0d)
108
+ ```
109
+
110
+ ---
111
+
112
+ ## `vec2d_normalize_x` <Badge type="info" text="v2.0.0" />
113
+
114
+ 二维单位向量的 X 分量;零向量返回 0.0
115
+
116
+ ```redscript
117
+ fn vec2d_normalize_x(x: double, y: double): double
118
+ ```
119
+
120
+ **参数**
121
+
122
+ | 参数 | 说明 |
123
+ |------|------|
124
+ | `x` | X 分量 |
125
+ | `y` | Y 分量 |
126
+
127
+ **返回:** x / ||(x,y)||,零向量时返回 0.0
128
+
129
+ **示例**
130
+
131
+ ```redscript
132
+ let nx: double = vec2d_normalize_x(3.0d, 4.0d)
133
+ ```
134
+
135
+ ---
136
+
137
+ ## `vec2d_normalize_y` <Badge type="info" text="v2.0.0" />
138
+
139
+ 二维单位向量的 Y 分量;零向量返回 0.0
140
+
141
+ ```redscript
142
+ fn vec2d_normalize_y(x: double, y: double): double
143
+ ```
144
+
145
+ **参数**
146
+
147
+ | 参数 | 说明 |
148
+ |------|------|
149
+ | `x` | X 分量 |
150
+ | `y` | Y 分量 |
151
+
152
+ **返回:** y / ||(x,y)||,零向量时返回 0.0
153
+
154
+ **示例**
155
+
156
+ ```redscript
157
+ let ny: double = vec2d_normalize_y(3.0d, 4.0d)
158
+ ```
159
+
160
+ ---
161
+
162
+ ## `vec3d_dot` <Badge type="info" text="v2.0.0" />
163
+
164
+ 两个三维向量的点积
165
+
166
+ ```redscript
167
+ fn vec3d_dot(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
168
+ ```
169
+
170
+ **参数**
171
+
172
+ | 参数 | 说明 |
173
+ |------|------|
174
+ | `ax` | X component of vector A |
175
+ | `ay` | Y component of vector A |
176
+ | `az` | Z component of vector A |
177
+ | `bx` | X component of vector B |
178
+ | `by` | Y component of vector B |
179
+ | `bz` | Z component of vector B |
180
+
181
+ **返回:** ax*bx + ay*by + az*bz
182
+
183
+ **示例**
184
+
185
+ ```redscript
186
+ let d: double = vec3d_dot(1.0d, 0.0d, 0.0d, 0.0d, 1.0d, 0.0d)
187
+ ```
188
+
189
+ ---
190
+
191
+ ## `vec3d_length` <Badge type="info" text="v2.0.0" />
192
+
193
+ 三维向量的欧几里得长度
194
+
195
+ ```redscript
196
+ fn vec3d_length(x: double, y: double, z: double): double
197
+ ```
198
+
199
+ **参数**
200
+
201
+ | 参数 | 说明 |
202
+ |------|------|
203
+ | `x` | X component |
204
+ | `y` | Y component |
205
+ | `z` | Z component |
206
+
207
+ **返回:** sqrt(x² + y² + z²)
208
+
209
+ **示例**
210
+
211
+ ```redscript
212
+ let len: double = vec3d_length(1.0d, 2.0d, 2.0d)
213
+ ```
214
+
215
+ ---
216
+
217
+ ## `vec3d_dist` <Badge type="info" text="v2.0.0" />
218
+
219
+ 两个三维点之间的欧几里得距离
220
+
221
+ ```redscript
222
+ fn vec3d_dist(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
223
+ ```
224
+
225
+ **参数**
226
+
227
+ | 参数 | 说明 |
228
+ |------|------|
229
+ | `ax` | X coordinate of point A |
230
+ | `ay` | Y coordinate of point A |
231
+ | `az` | Z coordinate of point A |
232
+ | `bx` | X coordinate of point B |
233
+ | `by` | Y coordinate of point B |
234
+ | `bz` | Z coordinate of point B |
235
+
236
+ **返回:** sqrt((ax-bx)² + (ay-by)² + (az-bz)²)
237
+
238
+ ---
239
+
240
+ ## `vec3d_cross_x` <Badge type="info" text="v2.0.0" />
241
+
242
+ 叉积 a × b 的 X 分量
243
+
244
+ ```redscript
245
+ fn vec3d_cross_x(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
246
+ ```
247
+
248
+ **参数**
249
+
250
+ | 参数 | 说明 |
251
+ |------|------|
252
+ | `ax` | X of A @param ay Y of A @param az Z of A |
253
+ | `bx` | X of B @param by Y of B @param bz Z of B |
254
+
255
+ **返回:** ay*bz - az*by
256
+
257
+ ---
258
+
259
+ ## `vec3d_cross_y` <Badge type="info" text="v2.0.0" />
260
+
261
+ 叉积 a × b 的 Y 分量
262
+
263
+ ```redscript
264
+ fn vec3d_cross_y(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
265
+ ```
266
+
267
+ **参数**
268
+
269
+ | 参数 | 说明 |
270
+ |------|------|
271
+ | `ax` | X of A @param ay Y of A @param az Z of A |
272
+ | `bx` | X of B @param by Y of B @param bz Z of B |
273
+
274
+ **返回:** az*bx - ax*bz
275
+
276
+ ---
277
+
278
+ ## `vec3d_cross_z` <Badge type="info" text="v2.0.0" />
279
+
280
+ 叉积 a × b 的 Z 分量
281
+
282
+ ```redscript
283
+ fn vec3d_cross_z(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
284
+ ```
285
+
286
+ **参数**
287
+
288
+ | 参数 | 说明 |
289
+ |------|------|
290
+ | `ax` | X of A @param ay Y of A @param az Z of A |
291
+ | `bx` | X of B @param by Y of B @param bz Z of B |
292
+
293
+ **返回:** ax*by - ay*bx
294
+
295
+ ---
296
+
297
+ ## `vec3d_normalize_x` <Badge type="info" text="v2.0.0" />
298
+
299
+ 三维单位向量的 X 分量;零向量返回 0.0
300
+
301
+ ```redscript
302
+ fn vec3d_normalize_x(x: double, y: double, z: double): double
303
+ ```
304
+
305
+ **参数**
306
+
307
+ | 参数 | 说明 |
308
+ |------|------|
309
+ | `x` | X component @param y Y component @param z Z component |
310
+
311
+ **返回:** x / ||(x,y,z)||,零向量时返回 0.0
312
+
313
+ **示例**
314
+
315
+ ```redscript
316
+ let nx: double = vec3d_normalize_x(3.0d, 4.0d, 0.0d)
317
+ ```
318
+
319
+ ---
320
+
321
+ ## `vec3d_normalize_y` <Badge type="info" text="v2.0.0" />
322
+
323
+ 三维单位向量的 Y 分量;零向量返回 0.0
324
+
325
+ ```redscript
326
+ fn vec3d_normalize_y(x: double, y: double, z: double): double
327
+ ```
328
+
329
+ **参数**
330
+
331
+ | 参数 | 说明 |
332
+ |------|------|
333
+ | `x` | X component @param y Y component @param z Z component |
334
+
335
+ **返回:** y / ||(x,y,z)||,零向量时返回 0.0
336
+
337
+ ---
338
+
339
+ ## `vec3d_normalize_z` <Badge type="info" text="v2.0.0" />
340
+
341
+ 三维单位向量的 Z 分量;零向量返回 0.0
342
+
343
+ ```redscript
344
+ fn vec3d_normalize_z(x: double, y: double, z: double): double
345
+ ```
346
+
347
+ **参数**
348
+
349
+ | 参数 | 说明 |
350
+ |------|------|
351
+ | `x` | X component @param y Y component @param z Z component |
352
+
353
+ **返回:** z / ||(x,y,z)||,零向量时返回 0.0
354
+
355
+ ---
356
+
357
+ ## `mat2d_det` <Badge type="info" text="v2.0.0" />
358
+
359
+ 2×2 矩阵的行列式
360
+
361
+ ```redscript
362
+ fn mat2d_det(a: double, b: double, c: double, d: double): double
363
+ ```
364
+
365
+ **参数**
366
+
367
+ | 参数 | 说明 |
368
+ |------|------|
369
+ | `a` | Element [0,0] @param b Element [0,1] |
370
+ | `c` | Element [1,0] @param d Element [1,1] |
371
+
372
+ **返回:** a*d - b*c
373
+
374
+ **示例**
375
+
376
+ ```redscript
377
+ let det: double = mat2d_det(1.0d, 2.0d, 3.0d, 4.0d)
378
+ ```
379
+
380
+ ---
381
+
382
+ ## `mat2d_mul_r0c0` <Badge type="info" text="v2.0.0" />
383
+
384
+ 两个 2×2 矩阵乘积 M0×M1 的元素 [0,0]
385
+
386
+ ```redscript
387
+ fn mat2d_mul_r0c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
388
+ ```
389
+
390
+ **参数**
391
+
392
+ | 参数 | 说明 |
393
+ |------|------|
394
+ | `a0` | M0 row-major elements (a0, b0, c0, d0) |
395
+ | `a1` | M1 row-major elements (a1, b1, c1, d1) |
396
+
397
+ **返回:** a0*a1 + b0*c1
398
+
399
+ ---
400
+
401
+ ## `mat2d_mul_r0c1` <Badge type="info" text="v2.0.0" />
402
+
403
+ 两个 2×2 矩阵乘积 M0×M1 的元素 [0,1]
404
+
405
+ ```redscript
406
+ fn mat2d_mul_r0c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
407
+ ```
408
+
409
+ **参数**
410
+
411
+ | 参数 | 说明 |
412
+ |------|------|
413
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
414
+
415
+ **返回:** a0*b1 + b0*d1
416
+
417
+ ---
418
+
419
+ ## `mat2d_mul_r1c0` <Badge type="info" text="v2.0.0" />
420
+
421
+ 两个 2×2 矩阵乘积 M0×M1 的元素 [1,0]
422
+
423
+ ```redscript
424
+ fn mat2d_mul_r1c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
425
+ ```
426
+
427
+ **参数**
428
+
429
+ | 参数 | 说明 |
430
+ |------|------|
431
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
432
+
433
+ **返回:** c0*a1 + d0*c1
434
+
435
+ ---
436
+
437
+ ## `mat2d_mul_r1c1` <Badge type="info" text="v2.0.0" />
438
+
439
+ 两个 2×2 矩阵乘积 M0×M1 的元素 [1,1]
440
+
441
+ ```redscript
442
+ fn mat2d_mul_r1c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
443
+ ```
444
+
445
+ **参数**
446
+
447
+ | 参数 | 说明 |
448
+ |------|------|
449
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
450
+
451
+ **返回:** c0*b1 + d0*d1
452
+
453
+ ---
454
+
455
+ ## `mat2d_vecmul_x` <Badge type="info" text="v2.0.0" />
456
+
457
+ 2×2 矩阵与向量乘积 M×v 的 X 分量
458
+
459
+ ```redscript
460
+ fn mat2d_vecmul_x(a: double, b: double, c: double, d: double, vx: double, vy: double): double
461
+ ```
462
+
463
+ **参数**
464
+
465
+ | 参数 | 说明 |
466
+ |------|------|
467
+ | `a` | M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1] |
468
+ | `vx` | Vector X component @param vy Vector Y component |
469
+
470
+ **返回:** a*vx + b*vy
471
+
472
+ ---
473
+
474
+ ## `mat2d_vecmul_y` <Badge type="info" text="v2.0.0" />
475
+
476
+ 2×2 矩阵与向量乘积 M×v 的 Y 分量
477
+
478
+ ```redscript
479
+ fn mat2d_vecmul_y(a: double, b: double, c: double, d: double, vx: double, vy: double): double
480
+ ```
481
+
482
+ **参数**
483
+
484
+ | 参数 | 说明 |
485
+ |------|------|
486
+ | `a` | M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1] |
487
+ | `vx` | Vector X component @param vy Vector Y component |
488
+
489
+ **返回:** c*vx + d*vy
490
+
491
+ ---
492
+
493
+ ## `solve2d_x` <Badge type="info" text="v2.0.0" />
494
+
495
+ 用 Cramer 法则求解 2×2 线性方程组的 x 分量
496
+
497
+ ```redscript
498
+ fn solve2d_x(a: double, b: double, c: double, d: double, ex: double, ey: double): double
499
+ ```
500
+
501
+ **参数**
502
+
503
+ | 参数 | 说明 |
504
+ |------|------|
505
+ | `a` | M[0,0] @param b M[0,1] |
506
+ | `c` | M[1,0] @param d M[1,1] |
507
+ | `ex` | RHS x @param ey RHS y |
508
+
509
+ **返回:** (ex*d - b*ey) / det
510
+
511
+ **示例**
512
+
513
+ ```redscript
514
+ let x: double = solve2d_x(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
515
+ ```
516
+
517
+ ---
518
+
519
+ ## `solve2d_y` <Badge type="info" text="v2.0.0" />
520
+
521
+ 用 Cramer 法则求解 2×2 线性方程组的 y 分量
522
+
523
+ ```redscript
524
+ fn solve2d_y(a: double, b: double, c: double, d: double, ex: double, ey: double): double
525
+ ```
526
+
527
+ **参数**
528
+
529
+ | 参数 | 说明 |
530
+ |------|------|
531
+ | `a` | M[0,0] @param b M[0,1] |
532
+ | `c` | M[1,0] @param d M[1,1] |
533
+ | `ex` | RHS x @param ey RHS y |
534
+
535
+ **返回:** (a*ey - ex*c) / det
536
+
537
+ **示例**
538
+
539
+ ```redscript
540
+ let y: double = solve2d_y(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
541
+ ```
542
+
543
+ ---