Published May 25, 2025 | Version v1
Model Open

Visualize Stone's Law of Universiality

Description

Here is an interactive graduated field concentration program representing Travis Raymond-Charlie Stone's Law Of Universiality and Unified Fields Theory of Everything. Supportive documentation gives reasoning, imagery, logic and information about how this conceptual structure can explain our existence in the universe. 


Published link:

https://claude.ai/public/artifacts/f02efea6-23b2-4d0f-8250-1f57299bafff

This is an interactive 3D tensor field visualization system that represents complex multi-dimensional data relationships. Here's what it does and how to use it:

What It Represents

The system visualizes a tensor field - a mathematical structure that contains values arranged in a 3D grid (like a cube of numbers). Each position in the grid holds a value between -9 and +9, represented as colored spheres in 3D space.

The visualization implements several advanced concepts:

  • Thread Sets: Six different computational "threads" that process the tensor data using different mathematical operations (like a + b → c). Each thread set has its own color scheme.
  • Coherence States: The system can be in "coherent" (synchronized, stable) or "decoherent" (noisy, quantum-like) modes.
  • Aspect Permutations: Different ways to arrange the coordinate system (XYZ, ZYX, YXZ, etc.).
  • F(n) Calculations: Shows exponential growth calculations based on the formula F(n) = 6 × 19^(n³).

How to Use It

3D Visualization

  • Drag with mouse to rotate the camera around the tensor field
  • Sphere colors indicate which thread set is active
  • Sphere sizes represent the magnitude of values at each position
  • Numbers floating above spheres show the actual tensor values
  • Lines between spheres (if enabled) show connections in the grid

Key Controls

  1. n-Field Size Slider (2-5): Changes the grid dimensions from 2×2×2 up to 5×5×5 cubes
  2. Coherence Mode: Switch between "Coherent" (stable, synchronized) and "Decoherent" (noisy, quantum-like) states
  3. Thread Set Selection: Click on any of the 6 colored thread sets to change the visualization color scheme and computational focus
  4. Aspect Permutation: Choose how the coordinate system is arranged (XYZ, ZYX, etc.)
  5. Suspicion Index: Influences how the thread calculations correlate with each other

Interactive Buttons

  • Start/Stop Rotation: Auto-rotates the 3D view
  • Regenerate Field: Creates new random tensor values
  • Show/Hide Connections: Toggles the lines connecting grid points

What You'll See

The system displays live calculations, thread outputs, and system status. As you adjust parameters, you'll see how different mathematical operations affect the tensor field, how coherence modes change the visual appearance, and how the exponential F(n) calculations scale dramatically with grid size.

This appears to be designed for exploring complex mathematical relationships, possibly related to quantum computing, tensor mathematics, or multi-dimensional data analysis in an interactive, visual way.

 



code:

import React, { useState, useRef, useEffect, useCallback } from 'react';
import * as THREE from 'three';

const TensorVisualization = () => {
  const mountRef = useRef(null);
  const sceneRef = useRef(null);
  const rendererRef = useRef(null);
  const cameraRef = useRef(null);
  const gridGroupRef = useRef(null);
  const animationIdRef = useRef(null);
  const mouseRef = useRef({ x: 0, y: 0, isDown: false });
  
  const [selectedAspect, setSelectedAspect] = useState('XYZ');
  const [isAnimating, setIsAnimating] = useState(false);
  const [nField, setNField] = useState(3);
  const [selectedThreadSet, setSelectedThreadSet] = useState(0);
  const [showConnections, setShowConnections] = useState(true);
  const [tensorValues, setTensorValues] = useState(() => {
    // Initialize random tensor values for 3x3x3 grid
    const values = {};
    for (let i = 0; i < 27; i++) {
      values[i] = Math.floor(Math.random() * 19) - 9;
    }
    return values;
  });
  const [coherenceMode, setCoherenceMode] = useState('coherent');
  const [suspicionIndex, setSuspicionIndex] = useState(1);

  const aspects = ['XYZ', 'ZYX', 'YXZ', 'ZXY', 'XZY', 'YZX'];
  const threadSets = [
    { name: 'a,b,c', axis: 'X (b)', color: '#ff4444', logic: 'a + b → c', output: 'x_b' },
    { name: 'd,e,f', axis: 'Y (e)', color: '#44ff44', logic: 'd + f → e', output: 'y_e' },
    { name: 'g,h,i', axis: 'Z (h)', color: '#4444ff', logic: 'g + i → h', output: 'z_h' },
    { name: 'j,k,l', axis: "X' (k)", color: '#ff44ff', logic: 'j + l → k', output: 'x_k' },
    { name: 'm,n,o', axis: "Y' (n)", color: '#44ffff', logic: 'm + o → n', output: 'y_n' },
    { name: 'p,q,r', axis: "Z' (q)", color: '#ffff44', logic: 'p + r → q', output: 'z_q' }
  ];

  // Calculate F(n) values
  const calculateFn = (n) => {
    const exponent = Math.pow(n, 3);
    const logResult = Math.log10(6) + exponent * Math.log10(19);
    return { exponent, logResult, scientific: Math.pow(10, logResult).toExponential(3) };
  };

  // Generate tensor field based on current settings
  const generateTensorField = useCallback(() => {
    const newValues = {};
    const gridSize = Math.pow(nField, 3);
    
    if (coherenceMode === 'coherent') {
      // Coherent state - values follow pattern
      for (let i = 0; i < gridSize; i++) {
        const baseValue = Math.floor(Math.random() * 19) - 9;
        newValues[i] = baseValue;
      }
    } else {
      // Decoherent state - add significant noise
      for (let i = 0; i < gridSize; i++) {
        const baseValue = Math.floor(Math.random() * 19) - 9;
        const noise = Math.floor(Math.random() * 12) - 6; // -6 to 6 noise
        newValues[i] = Math.max(-9, Math.min(9, baseValue + noise));
      }
    }
    
    setTensorValues(newValues);
  }, [nField, coherenceMode]);

  // Calculate thread logic outputs
  const calculateThreadOutputs = useCallback(() => {
    const outputs = {};
    threadSets.forEach((set, index) => {
      // Get values from different positions for each thread set
      const gridSize = Math.pow(nField, 3);
      const a = tensorValues[Math.min(index * 3, gridSize - 1)] || 0;
      const b = tensorValues[Math.min(index * 3 + 1, gridSize - 1)] || 0;
      const c = tensorValues[Math.min(index * 3 + 2, gridSize - 1)] || 0;
      
      // Apply thread logic with suspicion index influence
      let result;
      switch (index % 3) {
        case 0:
          result = ((a + b) * suspicionIndex) % 19 - 9;
          break;
        case 1:
          result = ((a * c) + suspicionIndex) % 19 - 9;
          break;
        case 2:
          result = ((b - c + suspicionIndex)) % 19 - 9;
          break;
        default:
          result = (a + c) % 19 - 9;
      }
      
      outputs[set.output] = Math.max(-9, Math.min(9, result));
    });
    return outputs;
  }, [tensorValues, nField, suspicionIndex]);

  // Handle mouse interactions
  const handleMouseDown = useCallback((event) => {
    event.preventDefault();
    mouseRef.current.isDown = true;
    mouseRef.current.x = event.clientX;
    mouseRef.current.y = event.clientY;
  }, []);

  const handleMouseMove = useCallback((event) => {
    if (!mouseRef.current.isDown || !cameraRef.current) return;
    
    event.preventDefault();
    const deltaX = event.clientX - mouseRef.current.x;
    const deltaY = event.clientY - mouseRef.current.y;
    
    // Rotate camera around the scene
    const spherical = new THREE.Spherical();
    spherical.setFromVector3(cameraRef.current.position);
    spherical.theta -= deltaX * 0.01;
    spherical.phi += deltaY * 0.01;
    spherical.phi = Math.max(0.1, Math.min(Math.PI - 0.1, spherical.phi));
    
    cameraRef.current.position.setFromSpherical(spherical);
    cameraRef.current.lookAt(0, 0, 0);
    
    mouseRef.current.x = event.clientX;
    mouseRef.current.y = event.clientY;
  }, []);

  const handleMouseUp = useCallback((event) => {
    event.preventDefault();
    mouseRef.current.isDown = false;
  }, []);

  // Initialize Three.js scene
  useEffect(() => {
    if (!mountRef.current) return;

    // Clear any existing renderer
    while (mountRef.current.firstChild) {
      mountRef.current.removeChild(mountRef.current.firstChild);
    }

    // Scene setup
    const scene = new THREE.Scene();
    scene.background = new THREE.Color(0x000015);
    sceneRef.current = scene;

    const camera = new THREE.PerspectiveCamera(75, 580/400, 0.1, 1000);
    cameraRef.current = camera;
    
    const renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setSize(580, 400);
    renderer.shadowMap.enabled = true;
    renderer.shadowMap.type = THREE.PCFSoftShadowMap;
    rendererRef.current = renderer;
    mountRef.current.appendChild(renderer.domElement);

    // Add lighting
    const ambientLight = new THREE.AmbientLight(0x404040, 0.4);
    scene.add(ambientLight);
    
    const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
    directionalLight.position.set(10, 10, 5);
    directionalLight.castShadow = true;
    directionalLight.shadow.mapSize.width = 2048;
    directionalLight.shadow.mapSize.height = 2048;
    scene.add(directionalLight);

    // Create grid group
    const gridGroup = new THREE.Group();
    gridGroupRef.current = gridGroup;
    scene.add(gridGroup);

    // Add coordinate axes
    const axesHelper = new THREE.AxesHelper(5);
    scene.add(axesHelper);

    // Camera position based on nField
    const distance = Math.max(8, nField * 3);
    camera.position.set(distance, distance * 0.8, distance);
    camera.lookAt(0, 0, 0);

    // Add mouse event listeners to the canvas
    const canvas = renderer.domElement;
    canvas.style.display = 'block';
    canvas.style.touchAction = 'none';
    canvas.addEventListener('mousedown', handleMouseDown, { passive: false });
    canvas.addEventListener('mousemove', handleMouseMove, { passive: false });
    canvas.addEventListener('mouseup', handleMouseUp, { passive: false });
    canvas.addEventListener('mouseleave', handleMouseUp, { passive: false });

    // Animation loop
    const animate = () => {
      animationIdRef.current = requestAnimationFrame(animate);
      
      if (isAnimating && gridGroupRef.current) {
        gridGroupRef.current.rotation.y += 0.008;
        gridGroupRef.current.rotation.x += 0.004;
      }
      
      renderer.render(scene, camera);
    };
    animate();

    return () => {
      if (animationIdRef.current) {
        cancelAnimationFrame(animationIdRef.current);
      }
      if (canvas) {
        canvas.removeEventListener('mousedown', handleMouseDown);
        canvas.removeEventListener('mousemove', handleMouseMove);
        canvas.removeEventListener('mouseup', handleMouseUp);
        canvas.removeEventListener('mouseleave', handleMouseUp);
      }
      renderer.dispose();
    };
  }, [handleMouseDown, handleMouseMove, handleMouseUp, isAnimating]);

  // Update visualization when parameters change
  useEffect(() => {
    if (!gridGroupRef.current) return;

    // Clear existing objects
    while (gridGroupRef.current.children.length > 0) {
      const child = gridGroupRef.current.children[0];
      gridGroupRef.current.remove(child);
      if (child.geometry) child.geometry.dispose();
      if (child.material) {
        if (Array.isArray(child.material)) {
          child.material.forEach(mat => mat.dispose());
        } else {
          child.material.dispose();
        }
      }
    }

    const gridSize = nField;
    const spacing = 2.5;
    const positions = [];
    
    // Generate positions based on selected aspect (coordinate permutation)
    for (let i = 0; i < gridSize; i++) {
      for (let j = 0; j < gridSize; j++) {
        for (let k = 0; k < gridSize; k++) {
          let x, y, z;
          
          // Apply aspect permutation
          switch (selectedAspect) {
            case 'XYZ': [x, y, z] = [i, j, k]; break;
            case 'ZYX': [x, y, z] = [k, j, i]; break;
            case 'YXZ': [x, y, z] = [j, i, k]; break;
            case 'ZXY': [x, y, z] = [k, i, j]; break;
            case 'XZY': [x, y, z] = [i, k, j]; break;
            case 'YZX': [x, y, z] = [j, k, i]; break;
            default: [x, y, z] = [i, j, k];
          }
          
          const pos = {
            x: (x - (gridSize - 1) / 2) * spacing,
            y: (y - (gridSize - 1) / 2) * spacing,
            z: (z - (gridSize - 1) / 2) * spacing,
            index: i * gridSize * gridSize + j * gridSize + k
          };
          positions.push(pos);
        }
      }
    }

    // Create spheres for each position
    positions.forEach((pos) => {
      const value = tensorValues[pos.index] || 0;
      const normalizedValue = (value + 9) / 18; // Normalize -9 to 9 → 0 to 1
      
      // Size based on absolute value and coherence mode
      const baseSize = coherenceMode === 'coherent' ? 0.15 : 0.12;
      const size = baseSize + Math.abs(value) * 0.03;
      
      const geometry = new THREE.SphereGeometry(size, 16, 16);
      
      // Color based on thread set and value
      const threadSetIndex = selectedThreadSet;
      const baseColor = new THREE.Color(threadSets[threadSetIndex].color);
      const color = baseColor.clone();
      
      if (value < 0) {
        color.multiplyScalar(0.4); // Much darker for negative values
      } else {
        color.multiplyScalar(0.6 + normalizedValue * 0.4);
      }
      
      // Add coherence effect to material
      const material = new THREE.MeshPhongMaterial({ 
        color: color,
        transparent: true,
        opacity: coherenceMode === 'coherent' ? 0.9 : 0.7,
        shininess: coherenceMode === 'coherent' ? 150 : 80,
        emissive: coherenceMode === 'decoherent' ? new THREE.Color(0x111111) : new THREE.Color(0x000000)
      });
      
      const sphere = new THREE.Mesh(geometry, material);
      sphere.position.set(pos.x, pos.y, pos.z);
      sphere.castShadow = true;
      sphere.receiveShadow = true;
      
      // Add value label
      const canvas = document.createElement('canvas');
      const context = canvas.getContext('2d');
      canvas.width = 64;
      canvas.height = 64;
      context.fillStyle = value < 0 ? '#ff6666' : '#66ff66';
      context.font = 'bold 20px Arial';
      context.textAlign = 'center';
      context.fillText(value.toString(), 32, 40);
      
      const texture = new THREE.CanvasTexture(canvas);
      const spriteMaterial = new THREE.SpriteMaterial({ 
        map: texture, 
        transparent: true,
        opacity: 0.8
      });
      const sprite = new THREE.Sprite(spriteMaterial);
      sprite.position.set(pos.x, pos.y + size + 0.4, pos.z);
      sprite.scale.set(0.6, 0.6, 0.6);
      
      gridGroupRef.current.add(sphere);
      gridGroupRef.current.add(sprite);
    });

    // Add connections if enabled
    if (showConnections && positions.length > 1) {
      const lineColor = new THREE.Color(threadSets[selectedThreadSet].color);
      const lineMaterial = new THREE.LineBasicMaterial({ 
        color: lineColor,
        transparent: true,
        opacity: coherenceMode === 'coherent' ? 0.5 : 0.2
      });
      
      // Connect adjacent points based on grid structure
      for (let i = 0; i < positions.length; i++) {
        const pos1 = positions[i];
        
        // Connect to nearby grid neighbors
        for (let j = i + 1; j < positions.length; j++) {
          const pos2 = positions[j];
          const distance = Math.sqrt(
            Math.pow(pos1.x - pos2.x, 2) + 
            Math.pow(pos1.y - pos2.y, 2) + 
            Math.pow(pos1.z - pos2.z, 2)
          );
          
          // Only connect immediate neighbors
          if (distance <= spacing * 1.1) {
            const points = [
              new THREE.Vector3(pos1.x, pos1.y, pos1.z),
              new THREE.Vector3(pos2.x, pos2.y, pos2.z)
            ];
            const geometry = new THREE.BufferGeometry().setFromPoints(points);
            const line = new THREE.Line(geometry, lineMaterial);
            gridGroupRef.current.add(line);
          }
        }
      }
    }

    // Update camera position based on grid size
    if (cameraRef.current) {
      const distance = Math.max(8, nField * 3.5);
      const currentPos = cameraRef.current.position.clone().normalize().multiplyScalar(distance);
      cameraRef.current.position.copy(currentPos);
      cameraRef.current.lookAt(0, 0, 0);
    }
  }, [nField, tensorValues, selectedThreadSet, showConnections, selectedAspect, coherenceMode]);

  // Regenerate tensor field when nField changes
  useEffect(() => {
    generateTensorField();
  }, [nField, generateTensorField]);

  const fnResults = Array.from({ length: 5 }, (_, i) => {
    const n = i + 1;
    const result = calculateFn(n);
    return { n, ...result };
  });

  const threadOutputs = calculateThreadOutputs();

  return (
    <div className="w-full max-w-7xl mx-auto p-4 bg-gray-900 text-white min-h-screen">
      <h1 className="text-2xl font-bold mb-6 text-center bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent">
        Interactive Multi-Dimensional Tensor Field
      </h1>

      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
        {/* 3D Visualization */}
        <div className="bg-gray-800 rounded-lg p-4">
          <h2 className="text-lg font-semibold mb-3">Interactive 3D Tensor Field (n={nField})</h2>
          <div 
            ref={mountRef} 
            className="w-full bg-gray-900 border border-gray-600 rounded overflow-hidden flex justify-center"
            style={{ height: '400px' }}
          />
          
          {/* Controls directly below the 3D view */}
          <div className="mt-4 space-y-4">
            <div className="grid grid-cols-2 gap-4">
              <div>
                <label className="text-sm block mb-2 text-gray-300">Aspect Permutation:</label>
                <select 
                  value={selectedAspect}
                  onChange={(e) => setSelectedAspect(e.target.value)}
                  className="w-full bg-gray-700 text-white px-3 py-2 rounded border border-gray-600 focus:border-blue-500 focus:outline-none"
                >
                  {aspects.map(aspect => (
                    <option key={aspect} value={aspect}>{aspect}</option>
                  ))}
                </select>
              </div>
              
              <div>
                <label className="text-sm block mb-2 text-gray-300">Coherence Mode:</label>
                <select 
                  value={coherenceMode}
                  onChange={(e) => setCoherenceMode(e.target.value)}
                  className="w-full bg-gray-700 text-white px-3 py-2 rounded border border-gray-600 focus:border-blue-500 focus:outline-none"
                >
                  <option value="coherent">Coherent</option>
                  <option value="decoherent">Decoherent</option>
                </select>
              </div>
            </div>
            
            <div className="grid grid-cols-2 gap-4">
              <div>
                <label className="text-sm block mb-2 text-gray-300">n-Field Size: {nField}</label>
                <input
                  type="range"
                  min="2"
                  max="5"
                  value={nField}
                  onChange={(e) => setNField(parseInt(e.target.value))}
                  className="w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer"
                />
              </div>
              
              <div>
                <label className="text-sm block mb-2 text-gray-300">Suspicion Index: {suspicionIndex}</label>
                <input
                  type="range"
                  min="1"
                  max="10"
                  value={suspicionIndex}
                  onChange={(e) => setSuspicionIndex(parseInt(e.target.value))}
                  className="w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer"
                />
              </div>
            </div>

            <div className="flex flex-wrap gap-2">
              <button
                onClick={() => setIsAnimating(!isAnimating)}
                className="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500"
              >
                {isAnimating ? 'Stop' : 'Start'} Rotation
              </button>
              
              <button
                onClick={generateTensorField}
                className="bg-green-600 hover:bg-green-700 px-4 py-2 rounded text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-green-500"
              >
                Regenerate Field
              </button>
              
              <button
                onClick={() => setShowConnections(!showConnections)}
                className={`px-4 py-2 rounded text-sm transition-colors focus:outline-none focus:ring-2 ${
                  showConnections 
                    ? 'bg-yellow-600 hover:bg-yellow-700 focus:ring-yellow-500' 
                    : 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500'
                }`}
              >
                {showConnections ? ' Hide' : 'Show'} Connections
              </button>
            </div>
          </div>
        </div>

        {/* Control Panel */}
        <div className="space-y-4">
          {/* Thread Set Selection */}
          <div className="bg-gray-800 rounded-lg p-4">
            <h2 className="text-lg font-semibold mb-3">Thread Set Selection</h2>
            <div className="space-y-2 max-h-48 overflow-y-auto">
              {threadSets.map((set, index) => (
                <div 
                  key={index} 
                  className={`flex items-center gap-3 p-3 rounded cursor-pointer transition-all ${
                    index === selectedThreadSet 
                      ? 'bg-blue-900 border border-blue-600 shadow-lg' 
                      : 'bg-gray-700 hover:bg-gray-600 border border-transparent'
                  }`}
                  onClick={() => setSelectedThreadSet(index)}
                >
                  <div 
                    className="w-4 h-4 rounded-full flex-shrink-0 border border-gray-400" 
                    style={{ backgroundColor: set.color }}
                  />
                  <div className="flex-1 min-w-0">
                    <div className="font-mono text-sm font-semibold">{set.name}</div>
                    <div className="text-xs text-gray-300">{set.axis} • {set.logic}</div>
                  </div>
                  <div className="font-mono text-sm text-green-400 font-bold">
                    {threadOutputs[set.output] || 0}
                  </div>
                </div>
              ))}
            </div>
          </div>

          {/* Active Thread Details */}
          <div className="bg-gray-800 rounded-lg p-4">
            <h2 className="text-lg font-semibold mb-3">Active Thread Details</h2>
            <div className="bg-gray-700 rounded p-4">
              <div className="flex items-center gap-3 mb-3">
                <div 
                  className="w-6 h-6 rounded-full border border-gray-400" 
                  style={{ backgroundColor: threadSets[selectedThreadSet].color }}
                />
                <div className="font-mono text-xl font-bold">{threadSets[selectedThreadSet].name}</div>
              </div>
              <div className="space-y-2 text-sm">
                <div><span className="text-gray-400">Axis:</span> <span className="font-mono">{threadSets[selectedThreadSet].axis}</span></div>
                <div><span className="text-gray-400">Logic:</span> <span className="font-mono">{threadSets[selectedThreadSet].logic}</span></div>
                <div><span className="text-gray-400">Output:</span> <span className="font-mono text-blue-400">{threadSets[selectedThreadSet].output}</span></div>
                <div className="pt-2 border-t border-gray-600">
                  <span className="text-gray-400">Current Result:</span> 
                  <span className="font-mono text-green-400 text-lg font-bold ml-2">
                    {threadOutputs[threadSets[selectedThreadSet].output] || 0}
                  </span>
                </div>
              </div>
            </div>
          </div>

          {/* F(n) Calculations */}
          <div className="bg-gray-800 rounded-lg p-4">
            <h2 className="text-lg font-semibold mb-3">F(n) Live Calculations</h2>
            <div className="space-y-2 text-sm font-mono max-h-40 overflow-y-auto">
              {fnResults.map(({ n, exponent, scientific }) => (
                <div key={n} className={`p-3 rounded transition-all border ${
                  n === nField 
                    ? 'bg-blue-900 border-blue-600 shadow-lg' 
                    : 'bg-gray-700 border-transparent'
                }`}>
                  <div className={`text-sm font-semibold ${n === nField ? 'text-blue-300' : 'text-gray-200'}`}>
                    F({n}) = 6 × 19^{exponent}
                  </div>
                  <div className={`text-xs ${n === nField ? 'text-blue-200' : 'text-gray-300'}`}>
                    ≈ {scientific}
                  </div>
                  {n === nField && (
                    <div className="text-xs text-green-400 mt-1 font-semibold">
                      ← Current n-Field
                    </div>
                  )}
                </div>
              ))}
            </div>
          </div>
        </div>
      </div>

      {/* System Status */}
      <div className="mt-6 grid grid-cols-2 md:grid-cols-4 gap-4">
        <div className="bg-gray-800 rounded-lg p-4 text-center">
          <div className="font-semibold text-blue-400 text-sm">Current State</div>
          <div className="text-lg mt-1">{coherenceMode === 'coherent' ? 'Coherent' : ' Decoherent'}</div>
          <div className="text-xs text-gray-400 mt-1">
            {coherenceMode === 'coherent' ? 'Synchronized plots' : 'Quantum decoherence'}
          </div>
        </div>
        
        <div className="bg-gray-800 rounded-lg p-4 text-center">
          <div className="font-semibold text-green-400 text-sm">Asyncio Streams</div>
          <div className="text-lg font-mono mt-1">{suspicionIndex}</div>
          <div className="text-xs text-gray-400 mt-1">Correlation threads</div>
        </div>
        
        <div className="bg-gray-800 rounded-lg p-4 text-center">
          <div className="font-semibold text-purple-400 text-sm">Tensor Positions</div>
          <div className="text-lg font-mono mt-1">{Math.pow(nField, 3)}</div>
          <div className="text-xs text-gray-400 mt-1">{nField}×{nField}×{nField} grid</div>
        </div>
        
        <div className="bg-gray-800 rounded-lg p-4 text-center">
          <div className="font-semibold text-yellow-400 text-sm">Active Aspect</div>
          <div className="text-lg font-mono mt-1">{selectedAspect}</div>
          <div className="text-xs text-gray-400 mt-1">Coordinate permutation</div>
        </div>
      </div>

      {/* Help Text */}
      <div className="mt-6 bg-gray-800 rounded-lg p-4">
        <h3 className="text-lg font-semibold mb-3">Interactive Controls Guide</h3>
        <div className="grid grid-cols-1 md:grid-cols-2 gap-6 text-sm">
          <div>
            <div className="font-semibold text-blue-400 mb-2"> 3D Viewport:</div>
            <ul className="text-gray-300 space-y-1 ml-4">
              <li>• Drag to rotate the camera around the tensor field</li>
              <li>• Sphere colors match the selected thread set</li>
              <li>• Sphere sizes represent value magnitudes</li>
              <li>• Numbers show actual tensor values (-9 to +9)</li>
            </ul>
          </div>
          <div>
            <div className="font-semibold text-green-400 mb-2"> Parameter Controls:</div>
            <ul className="text-gray-300 space-y-1 ml-4">
              <li>• <strong>n-Field:</strong> Changes grid dimensions (2³ to 5³)</li>
              <li>• <strong>Coherence:</strong> Switches quantum states</li>
              <li>• <strong>Suspicion Index:</strong> Influences thread correlations</li>
              <li>• <strong>Aspect:</strong> Permutes coordinate system</li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  );
};

export default TensorVisualization;

Files

31BBF29A-3C75-4605-AA80-A2BC6FB22751.png

Files (28.5 MB)

Name Size Download all
md5:bce6be3a3e5c9a5597b3f5607cb50a41
108.0 kB Preview Download
md5:b4a9dd4d58758c1515594f195d1df13d
112.2 kB Preview Download
md5:7e92b94f23f68de1b6c0d6d83f2e229e
206.4 kB Preview Download
md5:c8cad6e5dabf064331764a29e1c20095
84.9 kB Preview Download
md5:db1b5d0522344d801da3568c6ed2ce84
114.5 kB Preview Download
md5:d7dfb4d593dd8c074904db53699920e8
220.1 kB Preview Download
md5:43d3d364e8357c7c35bcb213165ab791
497.8 kB Preview Download
md5:09ac4e59c108111fb6da0692479a355a
93.1 kB Preview Download
md5:a0530389fe97e8a6948e809c8975707c
429.0 kB Preview Download
md5:b32df54bbd2211b57068c20e37d6f013
87.3 kB Preview Download
md5:b9e949381c2377c16c0b20990c4282f3
939.2 kB Preview Download
md5:dc7b3094bda96eb900b89e2ca3c0f59d
186.9 kB Preview Download
md5:264e9221a6221ccf146dd91a2e8c8aed
952.4 kB Preview Download
md5:31de807dc66a581bc770ee04406833e6
62.9 kB Preview Download
md5:c0badd5ba0eb10984aff7614330637a3
323.2 kB Preview Download
md5:79723517f55c23355e29667ce87333f7
223.1 kB Preview Download
md5:c137da3254ba2f2ed1120e25380cd73b
179.8 kB Preview Download
md5:c23bbb6b0224abe19a61ceb947a91c22
192.1 kB Preview Download
md5:0118f9c48b1da34e365de2daf113ef4e
324.2 kB Preview Download
md5:4c214e2da7a6bb35afe1d431172e2a10
301.3 kB Preview Download
md5:87cb7b30ad61e239210531e5b6ecf64e
250.0 kB Preview Download
md5:d71aafc84cd0553d5ed0818e8d904d72
262.1 kB Preview Download
md5:0f4dc8b23762659bb31a2dbf8e669564
184.1 kB Preview Download
md5:9a13fdd266126c407597155961970770
410.5 kB Preview Download
md5:4700f111ea68ef49f8f766e0cb6f949d
272.1 kB Preview Download
md5:e715a6b41f4fe371328de7d0d1709d7b
183.0 kB Preview Download
md5:0fc8895192409a2f4eaa747fab8f5f66
241.2 kB Preview Download
md5:21fd91822f741d45612852a05764d81b
267.5 kB Preview Download
md5:3328b03cc8caffef0163f99c4760c9ba
139.9 kB Preview Download
md5:e13873944d2dad92938fc00358e9083f
309.5 kB Preview Download
md5:5c6146a32a234918f2f78d3f3deafa55
268.6 kB Preview Download
md5:3b271b15a1dabc2ea2577e9d170a85bf
498.5 kB Preview Download
md5:776636a350dd0240c31ebb9a283bfab4
276.3 kB Preview Download
md5:e846da38616f90b127a2d0db95a962f5
378.9 kB Preview Download
md5:24bba8b58e3c12e0ccaae77ea9741869
135.6 kB Preview Download
md5:3cc0adb6e243c8533927042f64ac96d0
110.0 kB Preview Download
md5:5a523cd826a5d1704d28e5584318b72f
66.3 kB Preview Download
md5:c336c8758257a80476d4ff5c74d9a0b0
101.0 kB Preview Download
md5:7819cccb5fd08056252cb8eae88aedc0
241.5 kB Preview Download
md5:0db0a8594f1962764893366aec7a3c91
402.4 kB Preview Download
md5:127125a16bdfc6d01d6ff696aed618d4
351.4 kB Preview Download
md5:3fd356cf43a68961e0d8723a91daa95a
287.2 kB Preview Download
md5:503f3da4c0d3d0be58c471fbb71f0e9a
257.6 kB Preview Download
md5:f6b7661feb364d5c3520c1e5a9279bac
258.3 kB Preview Download
md5:df40979ff232b29a0425a05e7b66be90
346.2 kB Preview Download
md5:907d07f555e6057ee97acc58be0d7388
301.7 kB Preview Download
md5:f96f6a03f13cb73aea64b78b4017e9b1
79.7 kB Preview Download
md5:29edd913219f4388d76c6bef198f20df
278.1 kB Preview Download
md5:7911b94c3b209d2020be2bfe87ef3cc8
174.6 kB Preview Download
md5:8b2b03d022c09094977f075e95dfe929
467.6 kB Preview Download
md5:0b68d924bbe8452ebe1911ff8a21a851
380.7 kB Preview Download
md5:2fea2e00e1905d3a60f4a4066b44dc0f
349.1 kB Preview Download
md5:f1be0a6b7df3eff6cf70ae0c3cf66485
182.0 kB Preview Download
md5:1aeee97e53d4b4faf9143f2fe16d81e7
225.2 kB Preview Download
md5:4eeec2fc3696b10f04d5fa7d1181c690
459.9 kB Preview Download
md5:9e37312b2bd95604d95f8e320cbe710f
189.8 kB Preview Download
md5:c7c56e8a797a54d17cb161d9c404140d
577.2 kB Preview Download
md5:b3d93758b62852608941e47d6a0c71bd
680.1 kB Preview Download
md5:a6620ed73157fd8350524d8766251309
312.3 kB Preview Download
md5:e1f50922343df060c0567a568ef0422d
411.5 kB Preview Download
md5:243a9cb9032fe4b33b7f45050a4fbf55
285.5 kB Preview Download
md5:b513a2d9da8496cded5479dbd9f3fced
370.6 kB Preview Download
md5:92480760ce032212a26d3d316344f6e6
354.6 kB Preview Download
md5:78df61bbced265f7917e6e6a4687b214
329.2 kB Preview Download
md5:a6acae2c7e394995fba5d42a9211bb7a
249.6 kB Preview Download
md5:9846e0bb5f5c6ef25d791a5fbf5453fe
264.4 kB Preview Download
md5:f1f7ea7f6806f8e202a51c160e5cc67e
129.6 kB Preview Download
md5:5bca479e11c137c4fe999529c9a71d7e
31.2 kB Preview Download
md5:7c3a0f2a9d54137c60a7c94f1863b712
1.3 MB Preview Download
md5:0d398d2d00e42a1badcf69fabc0c237b
527.4 kB Preview Download
md5:865097b7d37dd35c6bdf6726cc8ec8ef
556.9 kB Preview Download
md5:148fe65dbcf30fb9a164bd1e02c9e137
258.3 kB Preview Download
md5:10846ab980e3fabda9a3adbebc3c193f
89.8 kB Preview Download
md5:ffa7a001e89a7d0b013e40ca8e4dd626
360.5 kB Preview Download
md5:f6020c536217325e1ce2ad062de898f0
186.7 kB Preview Download
md5:5d401fad413fe6e683dcce4350de2d29
371.9 kB Preview Download
md5:1b2ecc2ce98d9cbf7784a77b4cca003d
323.6 kB Preview Download
md5:35dbb1b0aba2b4fa2e4d1e38c49b6762
388.4 kB Preview Download
md5:768a8cf414e303841b1355a36ccb20f0
222.3 kB Preview Download
md5:f1b3634bb5b1e3a52bfb0b568de5a4bd
239.2 kB Preview Download
md5:1e352657e627e0a8d400dab72d32c6b7
449.5 kB Preview Download
md5:19ec4bd68e0d9b0248fd6c00e8cefe34
164.7 kB Preview Download
md5:1bbf200510be6db04412dbfabaa92c63
246.6 kB Preview Download
md5:65007748acc2aaa0035a953f81b08391
208.5 kB Preview Download
md5:515973ea0f1c62ddb2f637095dc43658
361.1 kB Preview Download
md5:389b15c2f47263dad2bd25f79b30831f
291.8 kB Preview Download
md5:331de112a83952203cead235926c6ff2
20.0 kB Preview Download
md5:99b28e4b55a2407f58de092546c8d528
212.5 kB Preview Download
md5:17756bdcc032cca09c679e71b6e9eb84
632.7 kB Preview Download
md5:b7c52d401d17095c1d50cecfd8b53937
194.9 kB Preview Download
md5:b4862d0cf20c2a1b995f304bb3fe976e
138.8 kB Preview Download
md5:85577d341126c025883685ae16b8b5ee
187.9 kB Preview Download
md5:326a8b824c741cbc546292a2c3a48c66
201.2 kB Preview Download
md5:c8861ba85c801603025647c7031a2e99
275.1 kB Preview Download
md5:c0d1f2d2e5c12cd90703fffa2697c535
170.4 kB Preview Download
md5:3a6e700b6438df871c39110a6acf09f8
346.8 kB Preview Download
md5:b8730a551fdc132d933578692beb7a10
379.6 kB Preview Download