Feedback

C# - Wert normalisieren

Veröffentlicht von am 23.12.2013
(0 Bewertungen)
Wenn man mit periodischen Werten arbeitet, dann ist es häufig notwendig einen Wert in einen bestimmten Bereich zu bringen.
Als Beispiel ist der Sinus von 380° der selbe wie von 20°.

Diese Methode bringt einen Wert auf den Bereich 0 bis circle.

Funktionsweise
Es wird einfach der Rest bei der Division value/circle genommen. Bei negativen Werten wird aber noch ein weiteres circle addiert, damit das Ergebnis immer positiv ist.

Erweiterungsmethode
Ich war mir nicht sicher ob man dafür eine Erweiterungsmethode erstellen sollte. Unter "Normalize" könnte man noch mehr verstehen, besonders bei Gleitkommazahlen. Wer es trotzdem möchte kann das Attribut bzw. Schlüsselwort this einfach ergänzen.
Snippet in VB übersetzen
/// <summary>
/// Bringt einen Wert in den angegebenen Bereich indem ein Wert addiert bzw. subtrahiert wird.
/// </summary>
/// <param name="value">Der zu normalisierende Wert.</param>
/// <param name="circle">Die Größe einer Periodizität.</param>
static double Normalize(double value, double circle)
{
    return value < 0 ? value % circle + circle : value % circle;
}

2 Kommentare zum Snippet

Cherzog schrieb am 24.12.2013:
Was genau ist der Unterschied zu "380 Mod 360"?
Koopakiller schrieb am 24.12.2013:
Der Unterschied liegt bei negativen Zahlen.
Denn -380° = 340° (es sind zwar auch -20°, ich wollte aber eine Positive Zahl haben.)
Aber dank deiner Frage konnte ich den Code noch etwas optimieren ;)
 

Logge dich ein, um hier zu kommentieren!