@vib3code/sdk 2.0.1

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 (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * 4D Tetrahedron (5-cell / Pentatope) Generator
3
+ *
4
+ * The 5-cell is the 4D analog of a tetrahedron.
5
+ * - 5 vertices
6
+ * - 10 edges
7
+ * - 10 triangular faces
8
+ * - 5 tetrahedral cells
9
+ *
10
+ * Also generates simpler 4D-embedded 3D tetrahedron variants.
11
+ */
12
+
13
+ import { Vec4 } from '../../math/Vec4.js';
14
+
15
+ /**
16
+ * Generate 5-cell (pentatope) vertices
17
+ * Regular 5-cell inscribed in unit 4-sphere
18
+ * All vertices equidistant from each other (edge length = size * sqrt(2))
19
+ * @param {number} size - Scale factor (default 1)
20
+ * @returns {Vec4[]} Array of 5 vertices
21
+ */
22
+ export function generatePentatopeVertices(size = 1) {
23
+ // Standard regular 5-cell coordinates
24
+ // These form a regular 4-simplex with all edges equal length
25
+ // Vertices are on the 3-sphere of radius size
26
+
27
+ const s = size;
28
+ const sqrt5 = Math.sqrt(5);
29
+ const sqrt10 = Math.sqrt(10);
30
+
31
+ // Coordinates that give equal distances between all vertex pairs
32
+ // Based on the 4-simplex inscribed in unit sphere
33
+ return [
34
+ new Vec4(s, s, s, -s / sqrt5),
35
+ new Vec4(s, -s, -s, -s / sqrt5),
36
+ new Vec4(-s, s, -s, -s / sqrt5),
37
+ new Vec4(-s, -s, s, -s / sqrt5),
38
+ new Vec4(0, 0, 0, s * sqrt5 - s / sqrt5)
39
+ ].map(v => {
40
+ // Normalize to put all on sphere of radius 'size'
41
+ const len = v.length();
42
+ return new Vec4(v.x * size / len, v.y * size / len, v.z * size / len, v.w * size / len);
43
+ });
44
+ }
45
+
46
+ /**
47
+ * Generate simple 4D tetrahedron (3D tetrahedron embedded in 4D at w=0)
48
+ * @param {number} size - Scale factor
49
+ * @returns {Vec4[]} Array of 4 vertices
50
+ */
51
+ export function generateTetrahedronVertices(size = 1) {
52
+ // Regular tetrahedron centered at origin, embedded at w=0
53
+ const a = size / Math.sqrt(2);
54
+
55
+ return [
56
+ new Vec4(a, a, a, 0),
57
+ new Vec4(a, -a, -a, 0),
58
+ new Vec4(-a, a, -a, 0),
59
+ new Vec4(-a, -a, a, 0)
60
+ ];
61
+ }
62
+
63
+ /**
64
+ * Generate 5-cell edges
65
+ * All pairs of vertices are connected in a 5-cell
66
+ * @returns {number[][]} Array of [i, j] index pairs
67
+ */
68
+ export function generatePentatopeEdges() {
69
+ const edges = [];
70
+ for (let i = 0; i < 5; i++) {
71
+ for (let j = i + 1; j < 5; j++) {
72
+ edges.push([i, j]);
73
+ }
74
+ }
75
+ return edges;
76
+ }
77
+
78
+ /**
79
+ * Generate tetrahedron edges
80
+ * @returns {number[][]} Array of [i, j] index pairs
81
+ */
82
+ export function generateTetrahedronEdges() {
83
+ return [
84
+ [0, 1], [0, 2], [0, 3],
85
+ [1, 2], [1, 3], [2, 3]
86
+ ];
87
+ }
88
+
89
+ /**
90
+ * Generate 5-cell faces (triangles)
91
+ * @returns {number[][]} Array of [a, b, c] vertex indices
92
+ */
93
+ export function generatePentatopeFaces() {
94
+ const faces = [];
95
+ for (let i = 0; i < 5; i++) {
96
+ for (let j = i + 1; j < 5; j++) {
97
+ for (let k = j + 1; k < 5; k++) {
98
+ faces.push([i, j, k]);
99
+ }
100
+ }
101
+ }
102
+ return faces;
103
+ }
104
+
105
+ /**
106
+ * Generate tetrahedron faces
107
+ * @returns {number[][]} Array of [a, b, c] vertex indices
108
+ */
109
+ export function generateTetrahedronFaces() {
110
+ return [
111
+ [0, 1, 2],
112
+ [0, 1, 3],
113
+ [0, 2, 3],
114
+ [1, 2, 3]
115
+ ];
116
+ }
117
+
118
+ /**
119
+ * Generate complete 5-cell geometry
120
+ * @param {number} size - Scale factor
121
+ * @returns {object} Geometry object
122
+ */
123
+ export function generatePentatope(size = 1) {
124
+ return {
125
+ name: 'pentatope',
126
+ vertices: generatePentatopeVertices(size),
127
+ edges: generatePentatopeEdges(),
128
+ faces: generatePentatopeFaces(),
129
+ cells: 5,
130
+ vertexCount: 5,
131
+ edgeCount: 10,
132
+ faceCount: 10
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Generate complete tetrahedron geometry (4D embedded)
138
+ * @param {number} size - Scale factor
139
+ * @returns {object} Geometry object
140
+ */
141
+ export function generateTetrahedron(size = 1) {
142
+ return {
143
+ name: 'tetrahedron',
144
+ vertices: generateTetrahedronVertices(size),
145
+ edges: generateTetrahedronEdges(),
146
+ faces: generateTetrahedronFaces(),
147
+ cells: 1,
148
+ vertexCount: 4,
149
+ edgeCount: 6,
150
+ faceCount: 4
151
+ };
152
+ }
153
+
154
+ /**
155
+ * Generate tetrahedron lattice in 4D
156
+ * Creates a grid of tetrahedra along W axis
157
+ * @param {number} size - Individual tetrahedron size
158
+ * @param {number} count - Number of layers along W
159
+ * @param {number} wSpacing - Spacing between layers
160
+ * @returns {object} Combined geometry
161
+ */
162
+ export function generateTetrahedronLattice(size = 0.5, count = 4, wSpacing = 0.8) {
163
+ const vertices = [];
164
+ const edges = [];
165
+
166
+ for (let layer = 0; layer < count; layer++) {
167
+ const baseVerts = generateTetrahedronVertices(size);
168
+ const wOffset = (layer - (count - 1) / 2) * wSpacing;
169
+ const vertexOffset = vertices.length;
170
+
171
+ // Add vertices with W offset
172
+ for (const v of baseVerts) {
173
+ vertices.push(new Vec4(v.x, v.y, v.z, wOffset));
174
+ }
175
+
176
+ // Add intra-layer edges
177
+ for (const [i, j] of generateTetrahedronEdges()) {
178
+ edges.push([vertexOffset + i, vertexOffset + j]);
179
+ }
180
+
181
+ // Connect to previous layer
182
+ if (layer > 0) {
183
+ const prevOffset = vertexOffset - 4;
184
+ for (let i = 0; i < 4; i++) {
185
+ edges.push([prevOffset + i, vertexOffset + i]);
186
+ }
187
+ }
188
+ }
189
+
190
+ return {
191
+ name: 'tetrahedron_lattice',
192
+ vertices,
193
+ edges,
194
+ faces: [],
195
+ cells: count,
196
+ vertexCount: vertices.length,
197
+ edgeCount: edges.length,
198
+ faceCount: 0
199
+ };
200
+ }
201
+
202
+ // 5-cell aliases and exports (5-cell is the common name for pentatope)
203
+ export const generate5CellVertices = generatePentatopeVertices;
204
+ export const generate5CellEdges = generatePentatopeEdges;
205
+ export const generate5CellFaces = generatePentatopeFaces;
206
+
207
+ /**
208
+ * Generate complete 5-cell geometry (alias with correct name)
209
+ * @param {number} size - Scale factor
210
+ * @returns {object} Geometry object
211
+ */
212
+ export function generate5Cell(size = 1) {
213
+ return {
214
+ name: '5cell',
215
+ vertices: generatePentatopeVertices(size),
216
+ edges: generatePentatopeEdges(),
217
+ faces: generatePentatopeFaces(),
218
+ cells: 5,
219
+ vertexCount: 5,
220
+ edgeCount: 10,
221
+ faceCount: 10
222
+ };
223
+ }
224
+
225
+ export default generateTetrahedron;
@@ -0,0 +1,304 @@
1
+ /**
2
+ * 4D Torus Generators
3
+ *
4
+ * In 4D, there are several types of tori:
5
+ * - Clifford Torus: flat torus embedded in 3-sphere
6
+ * - Duocylinder: product of two circles S¹ × S¹
7
+ * - 3-Torus: S¹ × S¹ × S¹
8
+ */
9
+
10
+ import { Vec4 } from '../../math/Vec4.js';
11
+
12
+ /**
13
+ * Generate Clifford Torus vertices
14
+ * The Clifford torus is a flat torus embedded in the 3-sphere.
15
+ * Parameterized by two angles: x = cos(θ), y = sin(θ), z = cos(φ), w = sin(φ)
16
+ *
17
+ * @param {number} radius - Overall radius
18
+ * @param {number} segments - Points per angle dimension
19
+ * @returns {Vec4[]} Array of vertices
20
+ */
21
+ export function generateCliffordTorusVertices(radius = 1, segments = 16) {
22
+ const vertices = [];
23
+ const scale = radius / Math.sqrt(2);
24
+
25
+ for (let i = 0; i < segments; i++) {
26
+ const theta = (i / segments) * Math.PI * 2;
27
+ const cosTheta = Math.cos(theta);
28
+ const sinTheta = Math.sin(theta);
29
+
30
+ for (let j = 0; j < segments; j++) {
31
+ const phi = (j / segments) * Math.PI * 2;
32
+ const cosPhi = Math.cos(phi);
33
+ const sinPhi = Math.sin(phi);
34
+
35
+ vertices.push(new Vec4(
36
+ scale * cosTheta,
37
+ scale * sinTheta,
38
+ scale * cosPhi,
39
+ scale * sinPhi
40
+ ));
41
+ }
42
+ }
43
+
44
+ return vertices;
45
+ }
46
+
47
+ /**
48
+ * Generate Clifford Torus edges
49
+ * @param {number} segments - Points per dimension
50
+ * @returns {number[][]} Edge pairs
51
+ */
52
+ export function generateCliffordTorusEdges(segments = 16) {
53
+ const edges = [];
54
+
55
+ for (let i = 0; i < segments; i++) {
56
+ for (let j = 0; j < segments; j++) {
57
+ const idx = i * segments + j;
58
+ const nextI = ((i + 1) % segments) * segments + j;
59
+ const nextJ = i * segments + ((j + 1) % segments);
60
+
61
+ edges.push([idx, nextI]);
62
+ edges.push([idx, nextJ]);
63
+ }
64
+ }
65
+
66
+ return edges;
67
+ }
68
+
69
+ /**
70
+ * Generate standard 3D torus embedded in 4D
71
+ * @param {number} majorRadius - Distance from center to tube center
72
+ * @param {number} minorRadius - Tube radius
73
+ * @param {number} majorSegments - Segments around major circle
74
+ * @param {number} minorSegments - Segments around minor circle
75
+ * @param {number} wOffset - W coordinate (default 0)
76
+ * @returns {Vec4[]} Vertices
77
+ */
78
+ export function generateTorusVertices(majorRadius = 1, minorRadius = 0.4, majorSegments = 16, minorSegments = 8, wOffset = 0) {
79
+ const vertices = [];
80
+
81
+ for (let i = 0; i < majorSegments; i++) {
82
+ const theta = (i / majorSegments) * Math.PI * 2;
83
+ const cosTheta = Math.cos(theta);
84
+ const sinTheta = Math.sin(theta);
85
+
86
+ for (let j = 0; j < minorSegments; j++) {
87
+ const phi = (j / minorSegments) * Math.PI * 2;
88
+ const cosPhi = Math.cos(phi);
89
+ const sinPhi = Math.sin(phi);
90
+
91
+ const x = (majorRadius + minorRadius * cosPhi) * cosTheta;
92
+ const y = (majorRadius + minorRadius * cosPhi) * sinTheta;
93
+ const z = minorRadius * sinPhi;
94
+
95
+ vertices.push(new Vec4(x, y, z, wOffset));
96
+ }
97
+ }
98
+
99
+ return vertices;
100
+ }
101
+
102
+ /**
103
+ * Generate torus edges
104
+ * @param {number} majorSegments
105
+ * @param {number} minorSegments
106
+ * @returns {number[][]} Edge pairs
107
+ */
108
+ export function generateTorusEdges(majorSegments = 16, minorSegments = 8) {
109
+ const edges = [];
110
+
111
+ for (let i = 0; i < majorSegments; i++) {
112
+ for (let j = 0; j < minorSegments; j++) {
113
+ const idx = i * minorSegments + j;
114
+ const nextI = ((i + 1) % majorSegments) * minorSegments + j;
115
+ const nextJ = i * minorSegments + ((j + 1) % minorSegments);
116
+
117
+ edges.push([idx, nextI]);
118
+ edges.push([idx, nextJ]);
119
+ }
120
+ }
121
+
122
+ return edges;
123
+ }
124
+
125
+ /**
126
+ * Generate 4D torus extending in W dimension
127
+ * Creates a torus that also loops in W
128
+ * @param {number} radius - Base radius
129
+ * @param {number} segments - Segments per dimension
130
+ * @returns {object} Geometry
131
+ */
132
+ export function generateTorus4D(radius = 1, segments = 12) {
133
+ const vertices = [];
134
+ const edges = [];
135
+
136
+ const r1 = radius;
137
+ const r2 = radius * 0.4;
138
+ const r3 = radius * 0.2;
139
+
140
+ for (let i = 0; i < segments; i++) {
141
+ const theta = (i / segments) * Math.PI * 2;
142
+ const ct = Math.cos(theta);
143
+ const st = Math.sin(theta);
144
+
145
+ for (let j = 0; j < segments; j++) {
146
+ const phi = (j / segments) * Math.PI * 2;
147
+ const cp = Math.cos(phi);
148
+ const sp = Math.sin(phi);
149
+
150
+ for (let k = 0; k < segments / 2; k++) {
151
+ const psi = (k / (segments / 2)) * Math.PI * 2;
152
+ const cps = Math.cos(psi);
153
+ const sps = Math.sin(psi);
154
+
155
+ const x = (r1 + r2 * cp + r3 * cps) * ct;
156
+ const y = (r1 + r2 * cp + r3 * cps) * st;
157
+ const z = r2 * sp;
158
+ const w = r3 * sps;
159
+
160
+ vertices.push(new Vec4(x, y, z, w));
161
+ }
162
+ }
163
+ }
164
+
165
+ // Generate edges connecting neighbors
166
+ const halfSeg = segments / 2;
167
+ for (let i = 0; i < segments; i++) {
168
+ for (let j = 0; j < segments; j++) {
169
+ for (let k = 0; k < halfSeg; k++) {
170
+ const idx = i * segments * halfSeg + j * halfSeg + k;
171
+ const nextI = ((i + 1) % segments) * segments * halfSeg + j * halfSeg + k;
172
+ const nextJ = i * segments * halfSeg + ((j + 1) % segments) * halfSeg + k;
173
+ const nextK = i * segments * halfSeg + j * halfSeg + ((k + 1) % halfSeg);
174
+
175
+ edges.push([idx, nextI]);
176
+ edges.push([idx, nextJ]);
177
+ edges.push([idx, nextK]);
178
+ }
179
+ }
180
+ }
181
+
182
+ return {
183
+ name: 'torus4d',
184
+ vertices,
185
+ edges,
186
+ faces: [],
187
+ vertexCount: vertices.length,
188
+ edgeCount: edges.length,
189
+ faceCount: 0
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Generate complete torus geometry (Clifford Torus)
195
+ * @param {number} radius - Radius
196
+ * @param {number} density - Vertex density
197
+ * @returns {object} Geometry
198
+ */
199
+ export function generateTorus(radius = 1, density = 16) {
200
+ const vertices = generateCliffordTorusVertices(radius, density);
201
+ const edges = generateCliffordTorusEdges(density);
202
+
203
+ return {
204
+ name: 'clifford_torus',
205
+ vertices,
206
+ edges,
207
+ faces: [],
208
+ vertexCount: vertices.length,
209
+ edgeCount: edges.length,
210
+ faceCount: 0
211
+ };
212
+ }
213
+
214
+ /**
215
+ * Generate Clifford Torus (alias with common parameter signature)
216
+ * @param {number} radius - Overall radius
217
+ * @param {number} tubeRadius - Tube thickness (used for scaling)
218
+ * @param {number} segments - Points per angle dimension
219
+ * @returns {object} Geometry object
220
+ */
221
+ export function generateCliffordTorus(radius = 1, tubeRadius = 0.3, segments = 16) {
222
+ const vertices = generateCliffordTorusVertices(radius, segments);
223
+ const edges = generateCliffordTorusEdges(segments);
224
+
225
+ return {
226
+ name: 'clifford_torus',
227
+ vertices,
228
+ edges,
229
+ faces: [],
230
+ vertexCount: vertices.length,
231
+ edgeCount: edges.length,
232
+ faceCount: 0,
233
+ radius,
234
+ tubeRadius
235
+ };
236
+ }
237
+
238
+ /**
239
+ * Generate 4D torus with 3 radii
240
+ * @param {number} r1 - Primary radius
241
+ * @param {number} r2 - Secondary radius
242
+ * @param {number} r3 - Tertiary radius (W dimension)
243
+ * @param {number} segments - Points per dimension
244
+ * @returns {object} Geometry object
245
+ */
246
+ export function generate4DTorus(r1 = 1, r2 = 0.3, r3 = 0.1, segments = 12) {
247
+ const vertices = [];
248
+ const edges = [];
249
+
250
+ const halfSeg = Math.max(2, Math.floor(segments / 2));
251
+
252
+ for (let i = 0; i < segments; i++) {
253
+ const theta = (i / segments) * Math.PI * 2;
254
+ const ct = Math.cos(theta);
255
+ const st = Math.sin(theta);
256
+
257
+ for (let j = 0; j < segments; j++) {
258
+ const phi = (j / segments) * Math.PI * 2;
259
+ const cp = Math.cos(phi);
260
+ const sp = Math.sin(phi);
261
+
262
+ for (let k = 0; k < halfSeg; k++) {
263
+ const psi = (k / halfSeg) * Math.PI * 2;
264
+ const cps = Math.cos(psi);
265
+ const sps = Math.sin(psi);
266
+
267
+ const x = (r1 + r2 * cp + r3 * cps) * ct;
268
+ const y = (r1 + r2 * cp + r3 * cps) * st;
269
+ const z = r2 * sp;
270
+ const w = r3 * sps;
271
+
272
+ vertices.push(new Vec4(x, y, z, w));
273
+ }
274
+ }
275
+ }
276
+
277
+ // Generate edges connecting neighbors
278
+ for (let i = 0; i < segments; i++) {
279
+ for (let j = 0; j < segments; j++) {
280
+ for (let k = 0; k < halfSeg; k++) {
281
+ const idx = i * segments * halfSeg + j * halfSeg + k;
282
+ const nextI = ((i + 1) % segments) * segments * halfSeg + j * halfSeg + k;
283
+ const nextJ = i * segments * halfSeg + ((j + 1) % segments) * halfSeg + k;
284
+ const nextK = i * segments * halfSeg + j * halfSeg + ((k + 1) % halfSeg);
285
+
286
+ edges.push([idx, nextI]);
287
+ edges.push([idx, nextJ]);
288
+ edges.push([idx, nextK]);
289
+ }
290
+ }
291
+ }
292
+
293
+ return {
294
+ name: '4d_torus',
295
+ vertices,
296
+ edges,
297
+ faces: [],
298
+ vertexCount: vertices.length,
299
+ edgeCount: edges.length,
300
+ faceCount: 0
301
+ };
302
+ }
303
+
304
+ export default generateTorus;