EASY Geschrieben 15. Juli 2022 Geschrieben 15. Juli 2022 Hallo, gibt es eine Methode mit der man aus "layout.time" als Ergebnis 0...1 erhält (ähnlich wie bei "toTime" wo die Zeitangebe über den Tag auch 0...1 sein kann)? Hintergrund: Ich möchte mit einer Animation etwas über 24 Stunden verteilt darstellen lassen. Ich kann zwar eine Animation zeitgesteuert definieren aber ich möchte die Anfangszeit für die Animation variabel gestalten (also nicht zwingend Mitternacht !) und sie soll ab dann 24 Stunden darstellen... so ein "offset" ließe sich einfach darstellen, wenn "layout.time" als Ergebnis 0...1 wäre, da die Animation auch über 0...1 definiert ist. Gruß EASY
EASY Geschrieben 15. Juli 2022 Autor Geschrieben 15. Juli 2022 Hallo, ich bin ein kleines Stückchen weitergekommen. Laut der lua Funktion "type(v)" liefert "layout.time" eine Tabelle (Typ table)...@Neo wie kann ich auf die einzelnen Tabellenelemente zugreifen um Stunden und Minuten zu extrahieren? Gruß EASY
Goetz Geschrieben 15. Juli 2022 Geschrieben 15. Juli 2022 @EASY Ich habe gerade probehalber die Zeit mit tostring in eine Zeichenkette gewandelt. Das funktioniert. Nur für den Fall, dass man die Werte nicht direkt extrahieren kann ...
tim-fischertechnik Geschrieben 15. Juli 2022 Geschrieben 15. Juli 2022 (bearbeitet) Hallo @EASY, ich habe eine Lösung parat. Und zwar kannst du mit der String-Bibliothek den Befehl gmatch verwenden. Mit diesem kann man in einem String nach einem bestimmten Pattern suchen. Wenn das passende Pattern gefunden wird, wir der gesuchte "Stringschnipsel" zurückgegeben, andernfalls der Wert nil. -- https://community.3d-modellbahn.de/forums/topic/7558-frage-zu-layouttime/ timeAsString = tostring(layout.time) -- lese die Zeit aus und wandle diese in einen String print("Aktuelle Uhrzeit: "..timeAsString.." Uhr") -- gebe die Aktuelle Zeit aus hours = string.match(timeAsString, "(%d+)") -- suche nach Pattern hh minutes = string.match(timeAsString, "(%d+)", -2) -- suche nach Pattern mm print(hours.."h"..":"..minutes.."min") hoursToMinutes = hours * 60; -- wandle Stunden in Minuten um print(hours.."h = "..hoursToMinutes.."min") minuten_gesamt = hoursToMinutes + minutes -- addiere restliche Minuten dazu print("Gesamtminuten: "..minuten_gesamt) timeToNumber = minuten_gesamt/1440 -- Teile Gesamtminuten durch einen Tag (24h*60min=1440min) print(timeToNumber) timeToNumber = minuten_gesamt/1440 -- Teile Stunden durch einen Tag (24h*60min=1440min) print(timeToNumber) Das habe mal auf die Schnelle zusammengebastelt. Das Ereignis wird jede Minute ausgelöst. Bestimmt lässt sich dort noch was vereinfachen.Hier noch ein die Content-ID: 1E20E137-B1EC-42C1-9643-B026E2417032 Liebe Grüße Tim Bearbeitet 16. Juli 2022 von tim-fischertechnik
EASY Geschrieben 15. Juli 2022 Autor Geschrieben 15. Juli 2022 Hallo, vor einer Stunde schrieb tim-fischertechnik: Ich habe eine Lösung parat. ... ich auch ... danke für Deinen Lösungsvorschlag... dann werde ich mir jetzt eine (vereinfachte) Funktion basteln, die den Wert zurückgibt.... ... es sei denn.. vor einer Stunde schrieb Goetz: Nur für den Fall, dass man die Werte nicht direkt extrahieren kann .. ... man kann doch... vor einer Stunde schrieb tim-fischertechnik: Bestimmt lässt sich dort noch was vereinfachen ... zum Nachvollziehen ist Deine "ausführliche" Variante sehr anschaulich... Gruß EASY
Goetz Geschrieben 15. Juli 2022 Geschrieben 15. Juli 2022 vor 26 Minuten schrieb EASY: ... man kann doch erzähl!
EASY Geschrieben 15. Juli 2022 Autor Geschrieben 15. Juli 2022 Hallo, vor 1 Stunde schrieb Goetz: vor 2 Stunden schrieb EASY: ... man kann doch erzähl! ...ok... es liegt an der Darstellung... vor 2 Stunden schrieb EASY: ... es sei denn.. vor 3 Stunden schrieb Goetz: Nur für den Fall, dass man die Werte nicht direkt extrahieren kann .. ... man kann doch... ... "es sei denn..." gehört noch zu "man kann doch". ... und bezieht sich darauf... vor 4 Stunden schrieb EASY: Laut der lua Funktion "type(v)" liefert "layout.time" eine Tabelle (Typ table)...Neo wie kann ich auf die einzelnen Tabellenelemente zugreifen um Stunden und Minuten zu extrahieren? und von Neo gab es noch keine Antwort. Zugegeben... ist etwas spitzfindig... manchmal geht es in diese Richtung mit mir durch... Entschuldige die Verwirrung... ich arbeite daran... (so ungefähr seit 45 Jahren). Gruß EASY
Neo Geschrieben 15. Juli 2022 Geschrieben 15. Juli 2022 Hallo, aktuell gibt es keine Möglichkeit, die Anlagenzeit direkt als Gleitkommazahl zwischen 0 und 1 zu ermitteln. Es führt nur der Weg über eine manuelle Konvertierung der Stunden und Minuten, so wie es Tim aufgezeigt hat. vor 4 Stunden schrieb EASY: wie kann ich auf die einzelnen Tabellenelemente zugreifen um Stunden und Minuten zu extrahieren Die Tabelle ist nur ein Interface zum Studio, sie enthält keine Daten, die für den User direkt verwertbar wären. Gern kann ich aber in einer zukünftigen Version das Time-Objekt um zwei Eigenschaften erweitern, um direkt auf die Stunden und Minuten als Zahl zuzugreifen. Dann braucht es nicht mehr die Extraktion aus einem String. Viele Grüße, Neo
EASY Geschrieben 15. Juli 2022 Autor Geschrieben 15. Juli 2022 Hallo, zugegeben mein Versuchsaufbau ist nicht gerade spannend... 2Minuten lang (entspricht 24 Stunden) ein Thermometer beobachten... ... aber ich habe es mir mal als Demo gebastelt um zu sehen, ob es prinzipiell geht. Das Ereignis jede Minute der Simulationzeit sieht nun so aus... function toTime0_1(ts,o) -- Simulationszeit, Zeitversatz local z=tostring(ts) -- Simulationszeit in String umwandeln... local t=string.match(z, "(%d+)")*60 -- Stunden extrahieren und in Minuten umwandeln... t=t+string.match(z, "(%d+)", -2)-- Minuten extrahieren und aufaddieren... t=t/1440 -- Umwandeln in 0...1 if t<=o then x=1-o+t -- Funktion von 1-o bis 1 else x=t-o -- Funktion von 0 bis 1-o end return x -- Wert zurückgeben end --[[ Minimale Temperatur + Temperaturhub * Sinusfunktion im Beispiel: die Startzeit ist 6:00 mit der unteren Temperatur. Die Sinusfunktion sorgt dafür, daß die Temperatur für die nächsten 12 Stunden steigt und dann über die nächsten 12 Stunden wieder fällt. Dies berücksichtigt, daß es morgens um 6:00 am kältesten ist und die höchste Temperatur erst gegen 17:00 bis 18:00 erreicht wird (und nicht um 12:00) --]] local t=15+25*math.sin(math.pi*toTime0_1(layout.time,6/24)) local x=(t+30)/80 -- Berechnung Wert für Animation $("Thermometer 01").animations["Temperatur"]:play(-1,0,x,x) -- Temperatur anzeigen ... wer mag, kann es gerne anschauen...Temperatur eines Sommertages.mbp P.S. das Thermometer gibt es als Entwurf unter 2383EC49-4A0E-43E4-B993-BFC5AFA5C64A Gruß EASY
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden