Einfache Wertenormalisierung für Darstellung in Diagramm

multimolti

Erfahrenes Mitglied
Hallo!

Ich wollte mir mal für C# eine eigene Diagramm-Klasse basteln, um dann sowas ähnliches wie die CPU-Auslastungs-Anzeige da zu machen.

Funktioniert soweit so gut, aber das Normalisieren der Punkte macht Probleme. Was ich damit meine:
Alle eingegebenen Werte zwischen a und b auf einen Wertebereich von 0 bis x bringen, wobei der kleinste Punkt a nachher 0 sein soll und der größte Punk b soll x sein, x ist meine Fensterhöhe.

Ich berechne das zur Zeit so:
Code:
                double stepsizeY = (height - 10) / (highest - lowest);

                // für jeden punkt dann:
                    Point addPoint = new Point((int)(i * stepsizeX + 5), ((int)(point.Value * stepsizeY) + 5 ));
Wobei eben highest und lowest a und b entsprechen, height ist x und über die X-Werte von meinem Punkt nachher braucht ihr euch keine Gedanken machen.

Aber das funktioniert so nicht. Wenn ich jetzt Werte zwischen 60.000 und 120.000 eingebe und das ganze auf zwischen 0 und 250 bringen will, dann ist nachher mein kleinster Wert 250 und mein Größter 495, also müsste ich überall nur 250 abziehen, um auf meine gewünschten Werte zu kommen.
Aber wenn meine Ausgangswerte zwischen 12.000 und 80.000 sind, dann bekomme ich nachher etwas zwischen 751 und 999, also müsste 3 mal 250 abziehen.
Das ist doch total bescheuert, wo ist mein Rechenfehler?
 
Hallo,

warum nicht einfach:
Java:
    private static double normalize(double value, double min, double max, double scale) {
        return value / (max-min) * scale;
    }

System.out.println(normalize(55000,6000,120000,250));
-> Ergebnis liegt dann zwischen 0 ... und 250
?

Gruß Tom
 
Habe es jetzt irgendwie hinbekommen:
Code:
double stepsizeY = (height - 10) / (highest - lowest);

int pointY = height - (int)((values[i].Value - lowest) * stepsizeY) - 5);

Das klappt soweit, und habe extra noch das height - ... eingebaut, damit die werte umgekehrt werden, also das Diagramm unten 0 und oben 250 hat.
 

Neue Beiträge

Zurück