Stückweise lineare Funktionen in Scripts

Scheduled maintenance pending. The forum will be closed at 4 o'clock a.m.
  • Mit diesem sperrigen Begriff sind Funktions-Kurven gemeint, die vom Programmierer frei erstellt werden können. Definiert werden sie, indem (mindestens 2) X-Y-Paare (Punkte) definiert werden, die dann rechnerisch mit geraden Linien verbunden werden. An anderer Stelle treten solche Funktionen in LOTUS auch auf, z.B. als Volume-Kurven im Sound-Editor.

    Ein typisches Beispiel hierfür sind Motorkennlinien. Diese folgen nicht einer einzelnen mathematischen Formel, sondern müssen entsprechenden Diagrammen der Datenblätter nachempfunden werden.


    Die Funktionen werden nach folgendem Prinzip angelegt:

    • Im Initialisierungs-Teil eine neue "Funktionshülle" definieren
    • Im Initialisierungs-Teil der Funktion nacheinander Wertepaare hinzufügen
    • Funktion an beliebiger Stelle verwenden

    Konkret werden diese Schritte wie folgt durchgeführt:


    Zuerst muss eine globale Integer-Variable definiert werden, die zur Identifikation der Funktion dient:


    Testfunction: integer;


    Mit der Funktion LinFuncNew kann man nun im Initialisierungs-Teil eine neue Funktion anlegen:


    Testfunction := LinFuncNew;


    Dieser Funktion kann man nun mit mehrmaligem Aufruf von LinFuncAddPair(id, x, y) die nötigen Wertepaare übergeben. Die Reihenfolge ist wichtig! X muss stets größer werden!


    Code
    1. LinFuncAddPair(Testfunction, 2, 6);
    2. LinFuncAddPair(Testfunction, 6, 5);
    3. LinFuncAddPair(Testfunction, 7, 8);
    4. LinFuncAddPair(Testfunction, 8, 2);


    Schließlich kann man an jeder beliebigen Stelle (natürlich erst nach der Definition) die Funktion mit LinFuncGetValue(id, x) verwenden:


    Ergebnis := LinFuncGetValue(Testfunction, 4); // Ergebnis = 5.5