@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.
- package/CHANGELOG.md +118 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
- package/DOCS/CI_TESTING.md +38 -0
- package/DOCS/CLI_ONBOARDING.md +75 -0
- package/DOCS/CONTROL_REFERENCE.md +64 -0
- package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
- package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
- package/DOCS/ENV_SETUP.md +189 -0
- package/DOCS/EXPORT_FORMATS.md +417 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
- package/DOCS/LICENSING_TIERS.md +275 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
- package/DOCS/OBS_SETUP_GUIDE.md +98 -0
- package/DOCS/PROJECT_SETUP.md +66 -0
- package/DOCS/RENDERER_LIFECYCLE.md +40 -0
- package/DOCS/REPO_MANIFEST.md +121 -0
- package/DOCS/SESSION_014_PLAN.md +195 -0
- package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
- package/DOCS/SYSTEM_INVENTORY.md +520 -0
- package/DOCS/TELEMETRY_EXPORTS.md +34 -0
- package/DOCS/WEBGPU_STATUS.md +38 -0
- package/DOCS/XR_BENCHMARKS.md +608 -0
- package/LICENSE +21 -0
- package/README.md +426 -0
- package/docs/.nojekyll +0 -0
- package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/02-hyperspatial_ego_death.html +346 -0
- package/docs/03-post_cartesian_sublime.html +346 -0
- package/docs/04-crystalline_void_meditation.html +346 -0
- package/docs/05-quantum_decoherence_ballet.html +346 -0
- package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/07-hyperspatial_ego_death.html +346 -0
- package/docs/08-post_cartesian_sublime.html +346 -0
- package/docs/09-crystalline_void_meditation.html +346 -0
- package/docs/10-quantum_decoherence_ballet.html +346 -0
- package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/12-hyperspatial_ego_death.html +346 -0
- package/docs/13-post_cartesian_sublime.html +346 -0
- package/docs/index.html +794 -0
- package/docs/test-hub.html +441 -0
- package/docs/url-state.js +102 -0
- package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
- package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
- package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
- package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
- package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
- package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
- package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
- package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
- package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
- package/docs/vib3-exports/index.html +238 -0
- package/docs/webgpu-live.html +702 -0
- package/package.json +367 -0
- package/src/advanced/AIPresetGenerator.js +777 -0
- package/src/advanced/MIDIController.js +703 -0
- package/src/advanced/OffscreenWorker.js +1051 -0
- package/src/advanced/WebGPUCompute.js +1051 -0
- package/src/advanced/WebXRRenderer.js +680 -0
- package/src/agent/cli/AgentCLI.js +615 -0
- package/src/agent/cli/index.js +14 -0
- package/src/agent/index.js +73 -0
- package/src/agent/mcp/MCPServer.js +950 -0
- package/src/agent/mcp/index.js +9 -0
- package/src/agent/mcp/tools.js +548 -0
- package/src/agent/telemetry/EventStream.js +669 -0
- package/src/agent/telemetry/Instrumentation.js +618 -0
- package/src/agent/telemetry/TelemetryExporters.js +427 -0
- package/src/agent/telemetry/TelemetryService.js +464 -0
- package/src/agent/telemetry/index.js +52 -0
- package/src/benchmarks/BenchmarkRunner.js +381 -0
- package/src/benchmarks/MetricsCollector.js +299 -0
- package/src/benchmarks/index.js +9 -0
- package/src/benchmarks/scenes.js +259 -0
- package/src/cli/index.js +675 -0
- package/src/config/ApiConfig.js +88 -0
- package/src/core/CanvasManager.js +217 -0
- package/src/core/ErrorReporter.js +117 -0
- package/src/core/ParameterMapper.js +333 -0
- package/src/core/Parameters.js +396 -0
- package/src/core/RendererContracts.js +200 -0
- package/src/core/UnifiedResourceManager.js +370 -0
- package/src/core/VIB3Engine.js +636 -0
- package/src/core/renderers/FacetedRendererAdapter.js +32 -0
- package/src/core/renderers/HolographicRendererAdapter.js +29 -0
- package/src/core/renderers/QuantumRendererAdapter.js +29 -0
- package/src/core/renderers/RendererLifecycleManager.js +63 -0
- package/src/creative/ColorPresetsSystem.js +980 -0
- package/src/creative/ParameterTimeline.js +1061 -0
- package/src/creative/PostProcessingPipeline.js +1113 -0
- package/src/creative/TransitionAnimator.js +683 -0
- package/src/export/CSSExporter.js +226 -0
- package/src/export/CardGeneratorBase.js +279 -0
- package/src/export/ExportManager.js +580 -0
- package/src/export/FacetedCardGenerator.js +279 -0
- package/src/export/HolographicCardGenerator.js +543 -0
- package/src/export/LottieExporter.js +552 -0
- package/src/export/QuantumCardGenerator.js +315 -0
- package/src/export/SVGExporter.js +519 -0
- package/src/export/ShaderExporter.js +903 -0
- package/src/export/TradingCardGenerator.js +3055 -0
- package/src/export/TradingCardManager.js +181 -0
- package/src/export/VIB3PackageExporter.js +559 -0
- package/src/export/index.js +14 -0
- package/src/export/systems/TradingCardSystemFaceted.js +494 -0
- package/src/export/systems/TradingCardSystemHolographic.js +452 -0
- package/src/export/systems/TradingCardSystemQuantum.js +411 -0
- package/src/faceted/FacetedSystem.js +963 -0
- package/src/features/CollectionManager.js +433 -0
- package/src/gallery/CollectionManager.js +240 -0
- package/src/gallery/GallerySystem.js +485 -0
- package/src/geometry/GeometryFactory.js +314 -0
- package/src/geometry/GeometryLibrary.js +72 -0
- package/src/geometry/buffers/BufferBuilder.js +338 -0
- package/src/geometry/buffers/index.js +18 -0
- package/src/geometry/generators/Crystal.js +420 -0
- package/src/geometry/generators/Fractal.js +298 -0
- package/src/geometry/generators/KleinBottle.js +197 -0
- package/src/geometry/generators/Sphere.js +192 -0
- package/src/geometry/generators/Tesseract.js +160 -0
- package/src/geometry/generators/Tetrahedron.js +225 -0
- package/src/geometry/generators/Torus.js +304 -0
- package/src/geometry/generators/Wave.js +341 -0
- package/src/geometry/index.js +142 -0
- package/src/geometry/warp/HypersphereCore.js +211 -0
- package/src/geometry/warp/HypertetraCore.js +386 -0
- package/src/geometry/warp/index.js +57 -0
- package/src/holograms/HolographicVisualizer.js +1073 -0
- package/src/holograms/RealHolographicSystem.js +966 -0
- package/src/holograms/variantRegistry.js +69 -0
- package/src/integrations/FigmaPlugin.js +854 -0
- package/src/integrations/OBSMode.js +754 -0
- package/src/integrations/ThreeJsPackage.js +660 -0
- package/src/integrations/TouchDesignerExport.js +552 -0
- package/src/integrations/frameworks/Vib3React.js +591 -0
- package/src/integrations/frameworks/Vib3Svelte.js +654 -0
- package/src/integrations/frameworks/Vib3Vue.js +628 -0
- package/src/llm/LLMParameterInterface.js +240 -0
- package/src/llm/LLMParameterUI.js +577 -0
- package/src/math/Mat4x4.js +708 -0
- package/src/math/Projection.js +341 -0
- package/src/math/Rotor4D.js +637 -0
- package/src/math/Vec4.js +476 -0
- package/src/math/constants.js +164 -0
- package/src/math/index.js +68 -0
- package/src/math/projections.js +54 -0
- package/src/math/rotations.js +196 -0
- package/src/quantum/QuantumEngine.js +906 -0
- package/src/quantum/QuantumVisualizer.js +1103 -0
- package/src/reactivity/ReactivityConfig.js +499 -0
- package/src/reactivity/ReactivityManager.js +586 -0
- package/src/reactivity/SpatialInputSystem.js +1783 -0
- package/src/reactivity/index.js +93 -0
- package/src/render/CommandBuffer.js +465 -0
- package/src/render/MultiCanvasBridge.js +340 -0
- package/src/render/RenderCommand.js +514 -0
- package/src/render/RenderResourceRegistry.js +523 -0
- package/src/render/RenderState.js +552 -0
- package/src/render/RenderTarget.js +512 -0
- package/src/render/ShaderLoader.js +253 -0
- package/src/render/ShaderProgram.js +599 -0
- package/src/render/UnifiedRenderBridge.js +496 -0
- package/src/render/backends/WebGLBackend.js +1108 -0
- package/src/render/backends/WebGPUBackend.js +1409 -0
- package/src/render/commands/CommandBufferExecutor.js +607 -0
- package/src/render/commands/RenderCommandBuffer.js +661 -0
- package/src/render/commands/index.js +17 -0
- package/src/render/index.js +367 -0
- package/src/scene/Disposable.js +498 -0
- package/src/scene/MemoryPool.js +618 -0
- package/src/scene/Node4D.js +697 -0
- package/src/scene/ResourceManager.js +599 -0
- package/src/scene/Scene4D.js +540 -0
- package/src/scene/index.js +98 -0
- package/src/schemas/error.schema.json +84 -0
- package/src/schemas/extension.schema.json +88 -0
- package/src/schemas/index.js +214 -0
- package/src/schemas/parameters.schema.json +142 -0
- package/src/schemas/tool-pack.schema.json +44 -0
- package/src/schemas/tool-response.schema.json +127 -0
- package/src/shaders/common/fullscreen.vert.glsl +5 -0
- package/src/shaders/common/fullscreen.vert.wgsl +17 -0
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +85 -0
- package/src/shaders/common/rotation4d.wgsl +86 -0
- package/src/shaders/common/uniforms.glsl +44 -0
- package/src/shaders/common/uniforms.wgsl +48 -0
- package/src/shaders/faceted/faceted.frag.glsl +129 -0
- package/src/shaders/faceted/faceted.frag.wgsl +164 -0
- package/src/shaders/holographic/holographic.frag.glsl +406 -0
- package/src/shaders/holographic/holographic.frag.wgsl +185 -0
- package/src/shaders/quantum/quantum.frag.glsl +513 -0
- package/src/shaders/quantum/quantum.frag.wgsl +361 -0
- package/src/testing/ParallelTestFramework.js +519 -0
- package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
- package/src/testing/exportFormats.test.js +8 -0
- package/src/testing/projections.test.js +14 -0
- package/src/testing/rotations.test.js +37 -0
- package/src/ui/InteractivityMenu.js +516 -0
- package/src/ui/StatusManager.js +96 -0
- package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
- package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
- package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
- package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
- package/src/variations/VariationManager.js +431 -0
- package/src/viewer/AudioReactivity.js +505 -0
- package/src/viewer/CardBending.js +481 -0
- package/src/viewer/GalleryUI.js +832 -0
- package/src/viewer/ReactivityManager.js +590 -0
- package/src/viewer/TradingCardExporter.js +600 -0
- package/src/viewer/ViewerPortal.js +374 -0
- package/src/viewer/index.js +12 -0
- package/src/wasm/WasmLoader.js +296 -0
- package/src/wasm/index.js +132 -0
- package/tools/agentic/mcpTools.js +88 -0
- package/tools/cli/agent-cli.js +92 -0
- package/tools/export/formats.js +24 -0
- package/tools/math/rotation-baseline.mjs +64 -0
- package/tools/shader-sync-verify.js +937 -0
- package/tools/telemetry/manifestPipeline.js +141 -0
- package/tools/telemetry/telemetryEvents.js +35 -0
- package/types/adaptive-sdk.d.ts +185 -0
- package/types/advanced/AIPresetGenerator.d.ts +81 -0
- package/types/advanced/MIDIController.d.ts +100 -0
- package/types/advanced/OffscreenWorker.d.ts +82 -0
- package/types/advanced/WebGPUCompute.d.ts +52 -0
- package/types/advanced/WebXRRenderer.d.ts +77 -0
- package/types/advanced/index.d.ts +46 -0
- package/types/core/ErrorReporter.d.ts +50 -0
- package/types/core/VIB3Engine.d.ts +204 -0
- package/types/creative/ColorPresetsSystem.d.ts +91 -0
- package/types/creative/ParameterTimeline.d.ts +74 -0
- package/types/creative/PostProcessingPipeline.d.ts +109 -0
- package/types/creative/TransitionAnimator.d.ts +71 -0
- package/types/creative/index.d.ts +35 -0
- package/types/integrations/FigmaPlugin.d.ts +46 -0
- package/types/integrations/OBSMode.d.ts +74 -0
- package/types/integrations/ThreeJsPackage.d.ts +62 -0
- package/types/integrations/TouchDesignerExport.d.ts +36 -0
- package/types/integrations/Vib3React.d.ts +74 -0
- package/types/integrations/Vib3Svelte.d.ts +63 -0
- package/types/integrations/Vib3Vue.d.ts +55 -0
- package/types/integrations/index.d.ts +52 -0
- package/types/reactivity/SpatialInputSystem.d.ts +173 -0
- package/types/reactivity/index.d.ts +394 -0
- package/types/render/CommandBuffer.d.ts +169 -0
- package/types/render/RenderCommand.d.ts +312 -0
- package/types/render/RenderState.d.ts +279 -0
- package/types/render/RenderTarget.d.ts +254 -0
- package/types/render/ShaderProgram.d.ts +277 -0
- package/types/render/UnifiedRenderBridge.d.ts +143 -0
- package/types/render/WebGLBackend.d.ts +168 -0
- package/types/render/WebGPUBackend.d.ts +186 -0
- 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;
|