Objekt in Sinuskurve Bewegen
-
Hallo!
Ich habe für ein kleines Spiel vor, dass sich fliegende Objekte in Sinuskurve bewegen. Zuerst nur ganz simpel von links nach rechts.
Wie berechne ich das jeweils. Klar habe ich in math.h sin, aber wie wende ich das an, wie kann ich die Frequenz erhöhen bzw. die Amplitude des sinus vergrößern.
Möchte da sehr flexibel sein.
(Was ich haben möchte ist quasi, was ich in meiner Logik des Objektes habe, damit in jedem Timer Tick meine x/y Koordinaten an die Sinuskurve angepasst werden.)
Danke für jeden Hinweis!
-
Mit deinem Faktor multiplizieren?
-
aber wie sieht meine formel aus?
Meine x Position z.b werde ich (denke ich) konstant erhöhen und mein y abhängig von diesem x machen.
Aber mein x nimmt ja werte innherhalb meines bildschirms an (0-640pixel)...
Und woher weiß ich wenn ich einfach den Sinus nehme, wie weit die kurve ausschlägt?
-
TheCppler schrieb:
Und woher weiß ich wenn ich einfach den Sinus nehme, wie weit die kurve ausschlägt?
Sinus geht von -1 bis 1.
-
für eine Sinuskurve mit Wellenlänge w und Amplitude h (verschoben in den Wertebereich 0...h) ist die Funktionsgleichung
f(x) = h/2 * (1 + sin(x*2*PI/w))
dh. für w=Bildschirmbreite und h+1=Bildschirmhöhe füllt 1 Periode der Sinuskurve den Bildschirm aus.
-
Dennoch ist mir schlicht und einfach unklar, wie ich auf meine y-position komme.
ich kann ja nicht einfach pro tick sagen:
x++;
y=sin(x);
....
-
TheCppler schrieb:
ich kann ja nicht einfach pro tick sagen:
Wieso denn nicht?
-
das heißt
x++;y = h/2 * (1 + sin(x*2*PI/w)
wird mir in jedem tick die positionen richtig updaten?
werde das gleich testen
-
versuch's mal ohne sinus Funktion.
Die sinus Funktion ist lahm.Für nen Popelspiel mag das egal sein, trotzdem sollte man sich so etwas nicht angewöhnen.
Schau dir den Bresenhamalgorithmus an, eventuell kannst du den für deine Zwecke adaptieren.
-
Hi,
Der Bildschirm hat doch nur eine endluicher Auflösung (< 2000). Was spricht dagegen, die 2000 Sinuswerte vorher zu berechnen und in ner Tabelle abzulegen. Wobei 2000 braucht man ja nicht, es reicht, wenn man eine Virtelwelle berechnet, der rest lässt sich daraus ableiten.
Gruß Mümmel
-
Danke Muemmel! Der tip war super!
LG
-
Oder so einen Generator hier:
sine = 0 cosine = amplitude sine = sine + f * cosine cosine = cosine - f * sine
mit
f = 2 * pi * f_osc / f_s
f_osc ist die gewünschte Frequenz, f_s die Abtastrate.