Jump to content

Frage zu layout.time...


EASY

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von tim-fischertechnik
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 doch9_9...

 

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 doch9_9...

... "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 daranB|... (so ungefähr seit 45 Jahren9_9;)).

Gruß
EASY

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

zugegeben mein Versuchsaufbau ist nicht gerade spannend... 2Minuten lang (entspricht 24 Stunden) ein Thermometer beobachten...
274142818_Demo01.jpg.ea6a16ea99ed735dc4e2d31f8c77d75d.jpg

... 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...