<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[FMath::Sin(); Verhalten]]></title><description><![CDATA[<p>Folgender Code</p>
<pre><code>FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;   
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
</code></pre>
<p>Durch die Zeile eins wird wohl die aktuelle Positions einer Spielfigur in <code>NewLocation</code> gespeichert. Die Frage stellt sich dann bei Zeile zwei. Was wird hier gemacht? Ich weiß, dass DeltaTime die Zeit berechnet, die gebraucht wird, um ein Frame zu berechnen, oder so in etwa. Vielleicht kann hier jemand Klarheit schaffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334181/fmath-sin-verhalten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 22:18:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334181.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Aug 2015 05:21:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 06:49:48 GMT]]></title><description><![CDATA[<p>Folgender Code</p>
<pre><code>FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;   
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
</code></pre>
<p>Durch die Zeile eins wird wohl die aktuelle Positions einer Spielfigur in <code>NewLocation</code> gespeichert. Die Frage stellt sich dann bei Zeile zwei. Was wird hier gemacht? Ich weiß, dass DeltaTime die Zeit berechnet, die gebraucht wird, um ein Frame zu berechnen, oder so in etwa. Vielleicht kann hier jemand Klarheit schaffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465741</guid><dc:creator><![CDATA[CrispyTurtleAlligator]]></dc:creator><pubDate>Thu, 27 Aug 2015 06:49:48 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 06:13:13 GMT]]></title><description><![CDATA[<p>Sieht für mich so aus, als soll die Höhe des Objekts periodisch Schwanken (zwei sich überlagernde Sinuswellen). Ist das ein Vogel oder ein anderes Fliegetier bzw. UFO?</p>
<p>Btw, oder es bewegt sich vor und zurück (Z-Richtung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465746</guid><dc:creator><![CDATA[Andromeda]]></dc:creator><pubDate>Thu, 27 Aug 2015 06:13:13 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 06:52:18 GMT]]></title><description><![CDATA[<p>Andromeda schrieb:</p>
<blockquote>
<p>Sieht für mich so aus, als soll die Höhe des Objekts periodisch Schwanken (zwei sich überlagernde Sinuswellen). Ist das ein Vogel oder ein anderes Fliegetier bzw. UFO?</p>
<p>Btw, oder es bewegt sich vor und zurück (Z-Richtung).</p>
</blockquote>
<p>Das letztere trifft zu. Es bewegt sich vor/zurück (Z-Richtung). Kannst du mir die ganzen Zeilen mal erläutern?</p>
<p>Warum wird das gemacht?</p>
<pre><code>float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
</code></pre>
<p>Warum wird RunningTime wieder um DeltaTime erhöht?</p>
<pre><code>RunningTime += DeltaTime;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2465747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465747</guid><dc:creator><![CDATA[CrispyTurtleAlligator]]></dc:creator><pubDate>Thu, 27 Aug 2015 06:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 07:13:21 GMT]]></title><description><![CDATA[<p><a href="http://www.wolframalpha.com/input/?i=f%28x%29+%3D+sin%28x+%2B+0.01%29+-+sin%28x%29" rel="nofollow">http://www.wolframalpha.com/input/?i=f(x)+%3D+sin(x+%2B+0.01)+-+sin(x)</a><br />
Spiel mal ein wenig damit rum. Desto geringer delta, desto flacher ist die Kurve. Viel Sinn macht das für mich aber auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465748</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Thu, 27 Aug 2015 07:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 07:22:33 GMT]]></title><description><![CDATA[<p>tkausl schrieb:</p>
<blockquote>
<p><a href="http://www.wolframalpha.com/input/?i=f%28x%29+%3D+sin%28x+%2B+0.01%29+-+sin%28x%29" rel="nofollow">http://www.wolframalpha.com/input/?i=f(x)+%3D+sin(x+%2B+0.01)+-+sin(x)</a><br />
Spiel mal ein wenig damit rum. Desto geringer delta, desto flacher ist die Kurve. Viel Sinn macht das für mich aber auch nicht.</p>
</blockquote>
<p>DeltaTime ist, wie der Name schon andeutet, ein Zeitschritt. Es wird hier also eine Positionsänderung für diesen Zeitschritt berechnet, so dass das Objekt einer Sinuskurve folgt. Und zwar so, dass diese Bewegung unabhängig von der Größe des Zeitschritts ist. Die nachfolgende Zeile setzt dann die sich daraus ergebende neue Position; die Zeile darauf berechnet die insgesamt &quot;vergangene&quot; Zeit (wird sicherlich noch irgendwo anders benötigt); und die letzte Zeile gibt die Änderungen an die Programmlogik weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465749</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 Aug 2015 07:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 07:34:20 GMT]]></title><description><![CDATA[<p>Die Programmlogik ist mir schon klar, programmiere auch Spiele nebenher, allerdings ergibt es für mich keinen sinn, die Kurvenhöhe vom delta abhängig zu machen. Bei einem langsameren PC würde das objekt so viel weiter ausschlagen als bei einem schnelleren PC.</p>
<p>Edit: Ah, das wird dann auf die höhe gerechnet... Gut, dann:<br />
Das Objekt bewegt sich irgendwie in einer &quot;Schlangenbewegung&quot; (langsamer und schneller). Mit sin(...)*delta solltest du &quot;fast&quot; das selbe Ergebnis bekommen, keine Ahnung warum es so gemacht wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465750</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Thu, 27 Aug 2015 07:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 07:41:56 GMT]]></title><description><![CDATA[<p>tkausl schrieb:</p>
<blockquote>
<p>Die Programmlogik ist mir schon klar, programmiere auch Spiele nebenher, allerdings ergibt es für mich keinen sinn, die Kurvenhöhe vom delta abhängig zu machen. Bei einem langsameren PC würde das objekt so viel weiter ausschlagen als bei einem schnelleren PC.</p>
<p>Edit: Ah, das wird dann auf die höhe gerechnet... Gut, dann:<br />
Das Objekt bewegt sich irgendwie in einer &quot;Schlangenbewegung&quot; (langsamer und schneller). Mit sin(...)*delta solltest du &quot;fast&quot; das selbe Ergebnis bekommen, keine Ahnung warum es so gemacht wurde.</p>
</blockquote>
<p>Hat vielleicht SeppJ eine Idee, warum es so gemacht wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465751</guid><dc:creator><![CDATA[CrispyTurtleAlligator]]></dc:creator><pubDate>Thu, 27 Aug 2015 07:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 09:13:00 GMT]]></title><description><![CDATA[<p>Er hats doch schon erklaert. Es wird das Delta einer Sinuskurve von t0 zu t1 berechnet. Das ist genau die Entfernung, die sich ein Objekt auf der Sinuskurve von t0 bis t1 bewegt. Also wird dieses Delta dann zur Position des Objekts addiert. Damit bewegt sich das Objekt auf einer simplen Sinuskurve, also nicht mit ueberlagert wie Andromeda behauptet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465762</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Thu, 27 Aug 2015 09:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 09:23:50 GMT]]></title><description><![CDATA[<p>CrispyTurtleAlligator schrieb:</p>
<blockquote>
<p>tkausl schrieb:</p>
<blockquote>
<p>Die Programmlogik ist mir schon klar, programmiere auch Spiele nebenher, allerdings ergibt es für mich keinen sinn, die Kurvenhöhe vom delta abhängig zu machen. Bei einem langsameren PC würde das objekt so viel weiter ausschlagen als bei einem schnelleren PC.</p>
<p>Edit: Ah, das wird dann auf die höhe gerechnet... Gut, dann:<br />
Das Objekt bewegt sich irgendwie in einer &quot;Schlangenbewegung&quot; (langsamer und schneller). Mit sin(...)*delta solltest du &quot;fast&quot; das selbe Ergebnis bekommen, keine Ahnung warum es so gemacht wurde.</p>
</blockquote>
<p>Hat vielleicht SeppJ eine Idee, warum es so gemacht wurde?</p>
</blockquote>
<p>Es sollen wohl 2 Sinusse gemischt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465765</guid><dc:creator><![CDATA[Andromeda]]></dc:creator><pubDate>Thu, 27 Aug 2015 09:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 10:40:39 GMT]]></title><description><![CDATA[<p>Andromeda schrieb:</p>
<blockquote>
<p>CrispyTurtleAlligator schrieb:</p>
<blockquote>
<p>Hat vielleicht SeppJ eine Idee, warum es so gemacht wurde?</p>
</blockquote>
<p>Es sollen wohl 2 Sinusse gemischt werden.</p>
</blockquote>
<p>Ich sehe da ehrlich gesagt kein &quot;mischen&quot;, sondern lediglich die Berechnung der <em>Veränderung</em> der Z-Position, während sich ein Objekt entlang einer Sinuskurve bewegt:<br />
Die aktuelle Position wird von der Position in der &quot;Vergangenheit&quot; subtrahiert, damit erhalt man die (negative) Veränderung über den Zeitraum <code>deltaTime</code> .</p>
<p>Ein Grund, das über diese Differenz zu machen, könnte allerdings tatsächlich ein mischen/überlagern sein: Und zwar mit anderen Transformationen die schon in den<br />
Koordinaten des Objekts stecken (durch andere, ähnliche Funktionen). z.B. könnte sich das Objekt in Weltkoordinaten kontinuierlich entang der Z-Achse bewegen,<br />
während es gleichzeitig in Z-Richtung um seinen lokalen Ursprung schwingt (Durch die Differenz kann man den Schwingunsganteil in Zeile 3 einfach aufaddieren,<br />
egal was in der &quot;Location&quot; sonst noch an Bewegung drinsteckt).</p>
<p>Ich würde so etwas zwar selbst eher mithilfe mehrerer Transformationsmatrizen beschreiben, aus denen sich die neue Position direkt berechnen lässt,<br />
aber mit aufaddieren wie hier kann man es natürlich auch machen (sofern man mit den Rundungsfehlern leben kann, die sich auf diese Weise wahrscheinlich immer weiter aufsummieren).</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465780</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Thu, 27 Aug 2015 10:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to FMath::Sin(); Verhalten on Thu, 27 Aug 2015 13:32:09 GMT]]></title><description><![CDATA[<p>Andromeda schrieb:</p>
<blockquote>
<p>Es sollen wohl 2 Sinusse gemischt werden.</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465804</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Thu, 27 Aug 2015 13:32:09 GMT</pubDate></item></channel></rss>