Uhr: Stunden rot, Minuten silber, Sekunden babyblau -- alle drei als Reihen
Wunsch Filipe: "stunden soll rot sein, minuten schwarz/silber und die sekunden babyblau. die punkte herum sollen eine mischung von rot schwarz und babyblau sein. ich will auch dass die stunden und minuten auch barren oder punkte sind und nicht so eine durchlaufende schleife." ALLE DREI BAHNEN SIND JETZT REIHEN. Die Stunde bekommt zwoelf Balken (ein Zifferblatt hat zwoelf), Minute und Sekunde sechzig. Die Glieder sind verschieden lang -- Punkt (0,01 + runde Kappe), kurzer Balken (1,7), langer Balken (5,5). Damit liest man die drei Bahnen auch dann auseinander, wenn jemand Farben schlecht unterscheidet; Farbe allein traegt eine Information nie. VIER FUNDE BEIM NACHMESSEN, keiner davon war vorher sichtbar: 1. ABRUNDEN STATT RUNDEN. `Math.round` liess Minute und Stunde ab der HAELFTE einen Balken zu frueh aufleuchten: um 14:30 zeigte der Stundenring vier statt drei Balken, der Minutenring ab Sekunde 30 einen zu viel. Die Uhr war damit die halbe Zeit ueber falsch -- und ausgerechnet zur vollen Stunde, wo man hinsieht, richtig. Nachgerechnet: 10:30 -> 11, 14:30 -> 3, 23:59 -> 12, 00:00 -> 1. 2. DIE PERLENKOEPFE TRUGEN DIE ALTE ZUORDNUNG. Die drei Boegen waren getauscht, die drei Koepfe nicht: ein roter Kopf sass auf der blauen Sekundenreihe, ein silberner auf den roten Stundenbalken. Das sah nach einem Winkelfehler aus, obwohl alle drei auf die Zehntelgrad genau standen (354 / 161,9 / 343,0 bei 23:26:59, gemessen). Wer eine Farbe tauscht, tauscht sie an ALLEN Stellen: Bogen, Kopf, Schein, Kranz. 3. DER SCHEIN LAG DREIFACH UEBEREINANDER. Jeder Ring liegt dreimal im SVG (Schatten, Hauptlage, Kante); `.uhr__stunde` traf alle drei. Das rote Leuchten lief dadurch bis ueber die Ziffern, obwohl in der Regel nur 1,8 px stehen -- genau das Verschwommene, das Filipe nicht will. Jetzt `.uhr__ring > …`: nur die Hauptlage leuchtet, Schatten und Kante bleiben hart. 4. ZWEI TOTE FARBSCHICHTEN in heim.css (Sekunde rot / Minute blau / Stunde bronze). Sie wurden vom spaeteren Satz ueberschrieben und waren unsichtbar -- aber wer die Datei von oben liest, haelt sie fuer die geltende Regel und aendert die falsche Stelle. Entfernt statt stehengelassen: EINE Stelle entscheidet ueber eine Farbe. Ausserdem: Der Kometenschweif ist raus (HTML und CSS, nicht ausgeblendet). Eine Reihe zeigt ihre Richtung durch das letzte Glied; ohne eigenes Muster haette er einen vollen Ring quer ueber die Punkte gezogen. Der Punktkranz aussen mischt jetzt Rot, Babyblau und ein sehr dunkles Blau im 18-Grad-Takt -- das Dunkel ist kein Loch, sonst zerfiele der Ring aus dem Augenwinkel in zwei Haelften. Gedaempft bleibt Pflicht: Die Sekunde laeuft dauernd und bekommt das ruhigste Babyblau, die Stunde bewegt sich kaum und darf die kraeftigste Farbe tragen. Die Auslieferungskennung ist auf allen 19 Seiten hochgesetzt, sonst kaeme keine der Aenderungen an. Geprueft: pruef-start-ansicht (alles in Ordnung), pruef-css-klassen (alles in Ordnung), Segmentzahlen und Perlenwinkel im Browser nachgemessen, Bildschirmfoto bei vierfacher Aufloesung. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -379,24 +379,6 @@
|
||||
for (const welcher of ['sekunde', 'minute', 'stunde']) {
|
||||
lagen[welcher] = [...document.querySelectorAll(`[data-ring="${welcher}"]`)];
|
||||
}
|
||||
/* DER SCHWEIF (08.09.2026): die letzten Grad vor der Spitze, heller.
|
||||
|
||||
Gerechnet, nicht geschaetzt. Ein Kreis mit Umfang U, Fortschritt
|
||||
a (0..1) und Schweiflaenge s soll ein Segment von (a*U - s) bis
|
||||
a*U zeigen. Mit `dasharray: s, U-s` beginnt das sichtbare Stueck
|
||||
bei (U - offset), also gilt
|
||||
|
||||
U - offset = a*U - s -> offset = U*(1-a) + s
|
||||
|
||||
Die Laenge wird bei kurzen Boegen mitgekuerzt: Am Anfang einer
|
||||
Minute ist der Bogen selbst noch kuerzer als der Schweif, und ein
|
||||
Schweif ohne Bogen darunter haenge sonst am Ende des Kreises --
|
||||
sichtbar als heller Strich bei zwoelf Uhr, wo nichts sein darf. */
|
||||
const SCHWEIF = { sekunde: 30, minute: 26, stunde: 22 }; // Bogenlaenge
|
||||
const spuren = {};
|
||||
for (const welcher of ['sekunde', 'minute', 'stunde']) {
|
||||
spuren[welcher] = document.querySelector(`[data-spur="${welcher}"]`);
|
||||
}
|
||||
|
||||
/* DIE SEKUNDE IST EINE PUNKTREIHE (08.09.2026).
|
||||
|
||||
@@ -415,13 +397,19 @@
|
||||
gebaut: n Paare aus Punkt und Luecke, dahinter eine Luecke ueber
|
||||
den ganzen Rest. Sechzig Zahlenpaare einmal je Sekunde sind
|
||||
nichts -- die Alternative waeren sechzig Elemente im Dokument. */
|
||||
const SEK_PUNKTE = 60;
|
||||
const punktMuster = (U, n) => {
|
||||
const schritt = U / SEK_PUNKTE;
|
||||
/* Wie viele Glieder hat welche Bahn, und wie lang ist eines?
|
||||
Die Sekunde bekommt PUNKTE (Laenge nahe null, runde Kappe), Minute
|
||||
und Stunde BALKEN -- je langsamer, desto laenger das Glied. So
|
||||
liest man die drei auch ohne Farbe auseinander. */
|
||||
const GLIEDER = { sekunde: 60, minute: 60, stunde: 12 };
|
||||
const GLIED_LAENGE = { sekunde: 0.01, minute: 1.7, stunde: 5.5 };
|
||||
|
||||
const punktMuster = (U, n, gesamt, laenge) => {
|
||||
const schritt = U / gesamt;
|
||||
if (n <= 0) return `0 ${U}`;
|
||||
/* 0.01 statt 0: Manche Browser zeichnen eine Strichlaenge von
|
||||
exakt null gar nicht, auch mit runder Kappe. */
|
||||
const paar = `0.01 ${(schritt - 0.01).toFixed(3)} `;
|
||||
const paar = `${laenge} ${(schritt - laenge).toFixed(3)} `;
|
||||
/* DIE REIHENFOLGE ENTSCHEIDET, OB DER REST EINE LUECKE IST.
|
||||
|
||||
In `dasharray` wechseln sich Strich und Luecke ab, beginnend
|
||||
@@ -446,30 +434,39 @@
|
||||
const setze = (welcher, anteil) => {
|
||||
const U = UMFANG[welcher];
|
||||
|
||||
if (welcher === 'sekunde') {
|
||||
/* Der erste Punkt gehoert der Sekunde 0 -- deshalb n = sk + 1:
|
||||
Bei 0 Sekunden leuchtet einer, bei 59 alle sechzig. Ein Ring,
|
||||
der bei null voellig leer ist, sieht eine Sekunde lang aus wie
|
||||
ein Ladefehler. */
|
||||
const n = Math.round(anteil * SEK_PUNKTE) + 1;
|
||||
const muster = punktMuster(U, Math.min(n, SEK_PUNKTE));
|
||||
for (const el of lagen[welcher]) {
|
||||
el.style.strokeDasharray = muster;
|
||||
el.style.strokeDashoffset = '0';
|
||||
}
|
||||
return;
|
||||
/* ALLE DREI BAHNEN SIND REIHEN (08.09.2026).
|
||||
|
||||
Filipe: "ich will auch dass die stunden und minuten auch barren
|
||||
oder punkte sind und nicht so eine durchlaufende schleife."
|
||||
|
||||
Ein durchgehender Bogen zeigt einen Stand, eine Reihe zeigt
|
||||
SCHRITTE -- und Zeit besteht aus Schritten. Die Stunde bekommt
|
||||
zwoelf Balken (ein Zifferblatt hat zwoelf), Minute und Sekunde
|
||||
sechzig. Das erste Glied gehoert dem Wert 0: Bei 0 Sekunden
|
||||
leuchtet eines, bei 59 alle sechzig. Ein Ring, der bei null
|
||||
voellig leer ist, sieht eine Sekunde lang aus wie ein
|
||||
Ladefehler. */
|
||||
const gesamt = GLIEDER[welcher];
|
||||
/* ABRUNDEN, NICHT RUNDEN -- der Unterschied ist ein ganzer Balken.
|
||||
|
||||
`Math.round` haette bei Minute und Stunde ab der HAELFTE
|
||||
aufgerundet: Um 14:30 lief der Stundenring auf 2 + 0,5 = 2,5,
|
||||
gerundet 3, plus eins = VIER Balken -- obwohl erst die dritte
|
||||
Stunde laeuft. Dasselbe im Minutenring ab Sekunde 30. Die Uhr
|
||||
war damit die halbe Zeit ueber einen Balken zu weit, und zwar
|
||||
gerade dann nicht, wenn man hinsieht (zur vollen Stunde stimmte
|
||||
sie). Nachgerechnet, nicht geschaetzt: 10:30 -> 11 Balken,
|
||||
14:30 -> 3, 23:59 -> 12, 00:00 -> 1.
|
||||
|
||||
Bei der Sekunde macht es keinen Unterschied (sk ist ganz), bei
|
||||
den anderen beiden ist es der ganze Unterschied. */
|
||||
const n = Math.min(Math.floor(anteil * gesamt) + 1, gesamt);
|
||||
const muster = punktMuster(U, n, gesamt, GLIED_LAENGE[welcher]);
|
||||
for (const el of lagen[welcher]) {
|
||||
el.style.strokeDasharray = muster;
|
||||
el.style.strokeDashoffset = '0';
|
||||
}
|
||||
|
||||
const wert = String(U * (1 - anteil));
|
||||
for (const el of lagen[welcher]) el.style.strokeDashoffset = wert;
|
||||
|
||||
const spur = spuren[welcher];
|
||||
if (!spur) return;
|
||||
const s = Math.min(SCHWEIF[welcher], U * anteil);
|
||||
if (s <= 0.5) { spur.style.opacity = '0'; return; } /* nichts zu zeigen */
|
||||
spur.style.opacity = '';
|
||||
spur.style.strokeDasharray = `${s} ${U - s}`;
|
||||
spur.style.strokeDashoffset = String(U * (1 - anteil) + s);
|
||||
};
|
||||
|
||||
/* Der Nullpunkt der eigenen Uhr -- siehe unten bei den Koepfen. */
|
||||
|
||||
Reference in New Issue
Block a user