Stückweise lineare Funktionen in Scripts: Unterschied zwischen den Versionen
imported>DrBlackError Keine Bearbeitungszusammenfassung |
(Updated from LOTUS Lexicon on 2025-01-21) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{ArticleMetadata | |||
|author=Marcel Kuhnt | |||
|created_date=2017-06-09T12:19:59+02:00 | |||
|modified_date=2017-06-09T12:19:59+02:00 | |||
|source_url=https://www.lotus-simulator.de/lexikon/index.php?entry/34-st%C3%BCckweise-lineare-funktionen-in-scripts/ | |||
}} | |||
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. | 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: | Konkret werden diese Schritte wie folgt durchgeführt: | ||
Zuerst muss eine globale Integer-Variable definiert werden, die zur Identifikation der Funktion dient: | 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 | Code | ||
1. [[https://www.lotus-simulator.de/lexikon/index.php?entry/34-st%C3%BCckweise-lineare-funktionen-in-scripts/#codeLine_1_4f754d|]]LinFuncAddPair(Testfunction, 2, 6); | |||
2. [[https://www.lotus-simulator.de/lexikon/index.php?entry/34-st%C3%BCckweise-lineare-funktionen-in-scripts/#codeLine_2_4f754d|]]LinFuncAddPair(Testfunction, 6, 5); | |||
3. [[https://www.lotus-simulator.de/lexikon/index.php?entry/34-st%C3%BCckweise-lineare-funktionen-in-scripts/#codeLine_3_4f754d|]]LinFuncAddPair(Testfunction, 7, 8); | |||
4. [[https://www.lotus-simulator.de/lexikon/index.php?entry/34-st%C3%BCckweise-lineare-funktionen-in-scripts/#codeLine_4_4f754d|]]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 | `Ergebnis := LinFuncGetValue(Testfunction, 4); // Ergebnis = 5.5` |
Aktuelle Version vom 21. Januar 2025, 21:56 Uhr
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. [[1]]LinFuncAddPair(Testfunction, 2, 6); 2. [[2]]LinFuncAddPair(Testfunction, 6, 5); 3. [[3]]LinFuncAddPair(Testfunction, 7, 8); 4. [[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`