import CoreGraphics /// Wo die Punkte eines Verlaufsdiagramms liegen. /// /// Die Schrittweite kommt aus der **vollen** Länge des Verlaufs, nicht aus der /// Anzahl der bisher vorhandenen Werte. Frisch gestartet hat der Verlauf zwei /// Messwerte statt sechzig — wurde daraus gerechnet, spannte sich der Weg /// zwischen ihnen über die ganze Breite. Das sah nach viel Bewegung aus und /// bedeutete nichts. public enum GraphLayout { /// - Parameters: /// - count: wie viele Werte vorliegen. /// - capacity: wie viele der Verlauf fasst. public static func positions(count: Int, capacity: Int, in rect: CGRect) -> [CGFloat] { // Eine Linie braucht zwei Punkte. Einen zu zeichnen ergäbe einen Strich // am Rand, der wie ein Messwert aussieht. guard count >= 2, capacity >= 2 else { return [] } let shown = min(count, capacity) let step = rect.width / CGFloat(capacity - 1) // Neue Werte rechts: der Verlauf wächst nach links weg. let start = rect.maxX - CGFloat(shown - 1) * step return (0.. CGFloat { guard capacity > 0 else { return totalWidth } let gaps = spacing * CGFloat(capacity - 1) // Sichtbar bleiben, auch wenn es eng wird — sonst verschwindet der // Verlauf bei schmalem Fenster ganz. return max((totalWidth - gaps) / CGFloat(capacity), 0.5) } }