// DTIM-ZEC Modell Framework (Jan Bühring) // Integriert Metriken des DAMTP-Papers für Web-Canvas (processing.min.js) float zeit = 0, zoom = 1.0; float protX, protY, camX, camY; float feldSpannungMax = 0, topologischeEntropie = 0; // Regler-Variablen (Live-Physiksteuerung) float raumDichte = 0.01; // Gitter-Metrik float zeitFluss = 0.012; // Diskrete Taktfrequenz (U_clock) float netzSpannung = 0.45; // Kopplungsschwelle I_crit // Storyboard & Flusssteuerung int aktuellePhase = 0; // 0: Vakuum, 1: Polarisation, 2: Gitter, 3: Proton, 4: Sonne boolean autoKamera = true; String[] phaseTitel = new String[5]; String[] phaseFakten = new String[5]; String[] damtpKommentar = new String[5]; void setup() { size(850, 700); // Erweitert für Info-Panels und Buttons protX = width / 2; protY = height / 3; camX = protX; camY = protY; // Mathematische Fakten & DAMTP-Zitate direkt aus dem DTIM-ZEC Framework initialisieren phaseTitel[0] = "1. PRIMORDIALES VAKUUM (Tr(ρ_0 Ĥ) = 0)"; phaseFakten[0] = "Globale Energie-Invarianz. Lokale Wölbungen (+E) werden instantan durch negative Gegen-Zustände (-E) kompensiert."; damtpKommentar[0] = "DAMTP Ref: 'The net energetic value of the universe remains identically zero at all computational steps.' (§1.2)"; phaseTitel[1] = "2. PHOTONEN-POLARISATION & LICHT"; phaseFakten[1] = "Extreme Feldspannungen kreuzen die Symmetrieachsen. Erste lokale Informations-Dichten kondensieren zu Quanten-Licht."; damtpKommentar[1] = "DAMTP Ref: 'Deterministic algorithmic updates emerge as continuous time and stochastic wave-function collapse.' (§1.3)"; phaseTitel[2] = "3. HEXAGONALES RAUMGITTER (L_Γ)"; phaseFakten[2] = "Minimalisierung der Informationstropie zwingt flache Netze in eine lückenlose 120°-Wabenstruktur (Kristallisation des Raums)."; damtpKommentar[2] = "DAMTP Ref: 'Einstein field equations are replaced by the discrete matrix relation: L_Γ Ψ_ij - Λ_0 γ_ij = (8πG/c⁴) * I_ij' (§2.2)"; phaseTitel[3] = "4. PROTONEN-WIRBEL (I > I_crit)"; phaseFakten[3] = "Drei lokale topologische Sub-Knoten (Quarks) verschmelzen. Masse stabilisiert sich durch asynchronen Zugdruck im Gitter."; damtpKommentar[3] = "DAMTP Ref: 'High-density clustering induces asymptotic vacuum tensile stress, replicating gravity without Dark Matter.' (§2.3)"; phaseTitel[4] = "5. STELLARE KERNFUSION (I_max Sättigung)"; phaseFakten[4] = "Extreme Verdichtung im Inneren der Sonne. Um Singularitäten zu verhindern, invertiert das Gitter rechnerisch zu Energie."; damtpKommentar[4] = "DAMTP Ref: 'At I_max = c⁵/(G*ħ), the Graph Laplacian undergoes a topological phase transition, resolving the singularity.' (§3.2)"; } void draw() { background(6); zeit += zeitFluss; // --- AUTOMATISCHE FOCUS-KAMERA --- if (autoKamera) { float zielZoom = 1.2; if (aktuellePhase == 0) { zielZoom = 1.0; protX = width/2 + sin(zeit)*20; protY = height/3; } else if (aktuellePhase == 1) { zielZoom = 1.6; protX = width/2 + sin(zeit*2)*40; protY = height/3 + cos(zeit)*25; } else if (aktuellePhase == 2) { zielZoom = 0.9; protX = width/2; protY = height/3; } else if (aktuellePhase == 3) { zielZoom = 2.2; protX = width/2 + noise(zeit)*40-20; protY = height/3 + noise(zeit+2)*40-20; } else if (aktuellePhase == 4) { zielZoom = 1.4; protX = width/2 + random(-6,6); protY = height/3 + random(-6,6); } zoom = lerp(zoom, zielZoom, 0.04); camX = lerp(camX, protX, 0.05); camY = lerp(camY, protY, 0.05); } // --- RAUM-RENDERING (DTIM FIELD AREA) --- pushMatrix(); translate(width/2, 240); // Skalierungszentrum scale(zoom); translate(-camX, -camY); int schritt = 26; feldSpannungMax = 0; float entropieZaehler = 0; for (int x = -100; x < width + 100; x += schritt) { for (int y = -100; y < 520; y += schritt) { float xMod = x * raumDichte; float yMod = y * raumDichte; // 120°-Symmetrie-Gleichungen des Skalarfeldes float w1 = sin(xMod + zeit); float w2 = sin((xMod * 0.5 + yMod * 0.866) - zeit * 1.1); float w3 = sin((xMod * 0.5 - yMod * 0.866) + zeit * 0.6); float feld = (w1 + w2 + w3) / 3.0; if (abs(feld) > feldSpannungMax) feldSpannungMax = abs(feld); entropieZaehler += pow(feld, 2); // Phasenabhängiges Zeichnen des Raumes if (aktuellePhase == 0) { float c = map(feld, -1, 1, 0, 90); fill(c * 0.1, c * 0.3, c, 35); noStroke(); rect(x, y, schritt-1, schritt-1); } else if (aktuellePhase == 1) { if (feld > netzSpannung) { fill(255, 240, 160, 50); stroke(255, 120, 0, 30); line(x, y, x + random(-25, 25), y + random(-25, 25)); } } else if (aktuellePhase >= 2) { if (feld > (netzSpannung - 0.25)) { stroke(0, 160, 255, 22); strokeWeight(1); noFill(); beginShape(); for (int i = 0; i < 6; i++) { float angle = PI / 3 * i; vertex(x + cos(angle)*19, y + sin(angle)*19); } endShape(CLOSE); } } if (aktuellePhase == 4 && random(1) > 0.97) { fill(255, random(80, 255), 0, 160); noStroke(); ellipse(x + random(20), y + random(20), 4, 4); } } } topologischeEntropie = (entropieZaehler / 1400.0) * raumDichte * 100; // PROTAGONIST RENDERING if (aktuellePhase == 0) { fill(0, 130, 255, 180); stroke(255, 80); ellipse(protX, protY, 36, 36); fill(255); noStroke(); ellipse(protX, protY, 6, 6); } else if (aktuellePhase == 1) { for (int i = 0; i < 3; i++) { stroke(255, 210, 0, 90 - i*25); noFill(); ellipse(protX, protY, 24 + i*20 + sin(zeit*12)*8, 24 + i*20 + sin(zeit*12)*8); } fill(255); noStroke(); ellipse(protX, protY, 12, 12); } else if (aktuellePhase == 2) { stroke(0, 255, 180, 180); strokeWeight(2); noFill(); ellipse(protX, protY, 44, 44); fill(0, 255, 180); noStroke(); ellipse(protX, protY, 8, 8); } else if (aktuellePhase == 3) { stroke(0, 200, 255, 120); strokeWeight(1.5); noFill(); ellipse(protX, protY, 50, 50); fill(255, 60, 60); noStroke(); // Quarks ellipse(protX + sin(zeit*6)*13, protY + cos(zeit*6)*13, 9, 9); ellipse(protX + sin(zeit*6 + TWO_PI/3)*13, protY + cos(zeit*6 + TWO_PI/3)*13, 9, 9); fill(60, 110, 255); ellipse(protX + sin(zeit*6 + 2*TWO_PI/3)*13, protY + cos(zeit*6 + 2*TWO_PI/3)*13, 9, 9); } else if (aktuellePhase == 4) { noFill(); stroke(255, 70, 0, 150); ellipse(protX, protY, (frameCount % 40) * 2.5, (frameCount % 40) * 2.5); fill(255, 220, 120); noStroke(); ellipse(protX, protY, 24, 24); stroke(255, 230, 200, 200); line(protX, protY, protX + random(-90, 90), protY + random(-90, 90)); } popMatrix(); // --- STATISCHES WEB HUD & INTERFACE (Y = 480 bis 700) --- drawWebInterface(); } void drawWebInterface() { // INFO TEXTBOARD (OBEN & MITTE TRENNUNG) fill(14, 18, 26); noStroke(); rect(0, 470, width, 230); stroke(35, 50, 70); strokeWeight(1); line(0, 470, width, 470); // Titel der Phase fill(0, 255, 200); textSize(15); textAlign(LEFT, TOP); text(phaseTitel[aktuellePhase], 25, 485); // Beschreibungstext (Für normale User) fill(240); textSize(12); text(phaseFakten[aktuellePhase], 25, 510, 480, 60); // Akademischer Peer-Review Kommentar (Aus dem Abstract/Paper für Adrian) fill(130, 160, 190); textSize(11); textFont(createFont("Courier", 11)); text(damtpKommentar[aktuellePhase], 25, 565, 480, 50); textFont(createFont("Arial", 12)); // Reset Font // RECHTE SEITE: KONTROLL-SLIDER drawSlider(540, 500, "RAUM-METRIC (Frequenz)", map(raumDichte, 0.003, 0.028, 0, 1)); drawSlider(540, 545, "TAKTRATE U_clock (Zeit)", map(zeitFluss, 0.0, 0.035, 0, 1)); drawSlider(540, 590, "I_crit MATRIX-SCHWELLE", map(netzSpannung, 0.15, 0.75, 0, 1)); // Echtzeit-Messdaten (DTIM-ZEC Auswertung) fill(90, 110, 130); textSize(10); text("METRICS:", 25, 625); fill(220); textSize(12); text("Feldamplitude Max: " + nf(feldSpannungMax, 1, 4) + " Φ", 25, 642); text("Topologische Entropie S_k: " + nf(topologischeEntropie, 2, 2), 25, 662); text("Kamera-Modus: " + (autoKamera ? "AUTOPILOT" : "MANUELL (OPEN WORLD)"), 220, 642); // INTERAKTIVE BUTTONS (WEITER & MODUS) // 1. Weiter-Button (Story Progression) fill(0, 200, 130); rect(540, 625, 135, 45, 4); fill(255); textAlign(CENTER, CENTER); textSize(13); text("NÄCHSTER SCHRITT ▶", 607, 647); // 2. Open World Toggle Button fill(autoKamera ? 35 : 180, autoKamera ? 65 : 40, autoKamera ? 120 : 40); rect(690, 625, 135, 45, 4); fill(255); text(autoKamera ? "🛰️ FREI FLIEGEN" : "🎬 AUTOPILOT", 757, 647); textAlign(LEFT, TOP); // Reset Alignment } void drawSlider(float x, float y, String label, float prozent) { fill(120, 140, 160); textSize(10); text(label, x, y - 14); stroke(35, 45, 60); strokeWeight(5); line(x, y, x + 280, y); stroke(0, 255, 200); strokeWeight(9); point(x + prozent * 280, y); strokeWeight(1); } // --- ZIELGERICHTETE INTERAKTION (BUTTON-DETEKTION) --- void mousePressed() { // Erkennung der Slider-Klicks im Interface-Bereich if (mouseY > 470) { // Weiter-Button geklickt (Erhöht Phase zyklisch 0->1->2->3->4->0) if (mouseX > 540 && mouseX < 675 && mouseY > 625 && mouseY < 670) { aktuellePhase = (aktuellePhase + 1) % 5; } // Open-World-Schalter geklickt if (mouseX > 690 && mouseX < 825 && mouseY > 625 && mouseY < 670) { autoKamera = !autoKamera; if (!autoKamera) { zoom = 1.3; camX = protX; camY = protY; } } handleSliders(); } } void mouseDragged() { if (mouseY > 470) { handleSliders(); } else if (!autoKamera) { // Open-World Navigation im Render-Fenster camX -= (mouseX - pmouseX) / zoom; camY -= (mouseY - pmouseY) / zoom; } } void handleSliders() { if (mouseX > 540 && mouseX < 820) { if (mouseY > 485 && mouseY < 515) raumDichte = map(mouseX, 540, 820, 0.003, 0.028); if (mouseY > 530 && mouseY < 560) zeitFluss = map(mouseX, 540, 820, 0.0, 0.035);if (mouseY > 575 && mouseY < 605) netzSpannung = map(mouseX, 540, 820, 0.15, 0.75);}}