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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user