Uebersicht: gestauchte Ringskala und staerker gespreizte Flusspunkte

Der Ring wuchs linear bis zur Skala - bei 15 kW Vollausschlag war ein
Geschoss mit 300 W ein Strich von zwei Grad. Jetzt bekommt das untere
Zehntel knapp ein Drittel des Rings, der volle Ausschlag bleibt bei skala.
Bei mehreren Segmenten wird ueber die Summe gerechnet, sonst waere die
Skala nicht additiv. Die Punkte laufen jetzt von 2,4 bis 13 statt 3,5 bis 10.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 09:43:32 +02:00
co-authored by Claude Opus 5
parent 993a4fe6f8
commit fe12e57d88
3 changed files with 33 additions and 5 deletions
+29 -3
View File
@@ -30,6 +30,21 @@
"use strict";
const NS = "http://www.w3.org/2000/svg";
/**
* Wie voll der Ring bei dieser Leistung ist (0..1).
*
* Nicht linear: bei 15 kW Vollausschlag waeren 300 W ein Strich von zwei
* Grad - man saehe nicht, ob das Erdgeschoss 50 W oder 500 W zieht, und
* genau in diesem Bereich steht die Anlage die meiste Zeit. Die gestauchte
* Skala gibt dem unteren Zehntel knapp ein Drittel des Rings und laesst den
* vollen Ausschlag trotzdem genau bei "skala".
*/
function ringAnteil(w, skala) {
if (!(skala > 0)) return 0;
const teil = Math.max(0, Math.min(1, Math.abs(w) / skala));
return Math.log10(1 + 9 * teil);
}
const RADIUS = 78;
const RADIUS_GROSS = 92;
const RAND = 60; // Luft um die äußersten Kreise
@@ -481,10 +496,18 @@
while (e.segmente.length < segmente.length) {
e.segmente.push(el("circle", { r: this.radius(k), class: "enf-bogen", pathLength: "100" }, e.ring));
}
let start = 0;
// Gerechnet wird ueber die Summe, nicht je Segment: die gestauchte
// Skala ist nicht additiv, sonst reichten drei Viertel-Segmente weiter
// als ein volles.
let start = 0, summe = 0;
e.segmente.forEach((kreis, i) => {
const s = segmente[i];
let laenge = s ? Math.max(0, Math.min(100 - start, (s.w / skala) * 100)) : 0;
let laenge = 0;
if (s) {
const vorher = ringAnteil(summe, skala) * 100;
summe += Math.max(0, s.w);
laenge = Math.max(0, Math.min(100 - start, ringAnteil(summe, skala) * 100 - vorher));
}
if (laenge < 0.4) laenge = 0;
const luecke = laenge > 0 && start > 0 ? 0.6 : 0;
const a = (laenge - luecke).toFixed(2), off = (-(start + luecke)).toFixed(2);
@@ -561,7 +584,10 @@
flussSetzen(f, w) {
const a = Math.abs(w);
const still = a < 15;
const breite = still ? 0 : 3.5 + 6.5 * (1 - Math.exp(-a / 3000));
// Die Punktgroesse soll die Leistung erzaehlen: von 2,4 (ein paar
// hundert Watt) bis 13 (Volllast). Vorher lag alles ab 3 kW dicht
// beieinander.
const breite = still ? 0 : 2.4 + 11 * (1 - Math.exp(-a / 5000));
// Schneller bei mehr Leistung: 2,6 s je Abschnitt bei wenig, 0,7 s bei viel.
// Gesetzt wird nicht die Dauer der CSS-Animation - eine neue Dauer
// rechnet die Position neu, und die Punkte springen -, sondern ihre