Easing.. von C++ zu BB

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Easing.. von C++ zu BB

BeitragMo, Jun 19, 2006 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo!

Ich habe folgende intressante Functionen im I-Net gefunden:

Code: [AUSKLAPPEN]


// quadratic easing in/out - acceleration until halfway, then deceleration
Math.easeInOutQuad = function (t, b, c, d) {
   if ((t/=d/2) < 1) return c/2*t*t + b;
   return -c/2 * ((--t)*(t-2) - 1) + b;


 /////////// ELASTIC EASING: exponentially decaying sine wave  //////////////

// t: current time, b: beginning value, c: change in value, d: duration, a: amplitude (optional), p: period (optional)
// t and d can be in frames or seconds/milliseconds

Math.easeInElastic = function (t, b, c, d, a, p) {
   if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
   if (a < Math.abs(c)) { a=c; var s=p/4; }
   else var s = p/(2*Math.PI) * Math.asin (c/a);
   return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
};

Math.easeOutElastic = function (t, b, c, d, a, p) {
   if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
   if (a < Math.abs(c)) { a=c; var s=p/4; }
   else var s = p/(2*Math.PI) * Math.asin (c/a);
   return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
};

Math.easeInOutElastic = function (t, b, c, d, a, p) {
   if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
   if (a < Math.abs(c)) { a=c; var s=p/4; }
   else var s = p/(2*Math.PI) * Math.asin (c/a);
   if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
   return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
};



nun möchte ich diese gerne BB tauglich machen. Nur kapier ich einige Code-Stücke nicht:

z.B


((--t)*(t-2) - 1)

((t/=d)==1)

t-=1

if (a < Math.abs(c)) { a=c; var s=p/4; }

...

...



wie würde das in BB code aussehen?
vielleicht wäre jemand so nett, und könnte mir den code übersetzen? natürlich nur, wenn es nich zu umständlich ist... (hab leider keine Ahnung von C++, sofern dieser code ein C++ code ist... Rolling Eyes )
 

Dreamora

BeitragMo, Jun 19, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
((--t)*(t-2) - 1)
=> ((t-1)(t-2) - 1)

((t/=d)==1)
=> (t = t/d) = 1
Das geht so natürlich nicht, also erst zuweisen, dann vergleichen

t-=1
=> t = t - 1

if (a < Math.abs(c)) { a=c; var s=p/4; }
=>
if a < abs(c)
a = c
s = p / 4
endif
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Mo, Jun 19, 2006 21:23, insgesamt einmal bearbeitet

Iguan

BeitragMo, Jun 19, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW! das ging aber schnell!! Vielen dank, das werde ich gleich mal probieren!

Iguan

BeitragMo, Jun 19, 2006 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich hab jetzt mal was gemacht, soweit ich deine übersetzung verstanden habe... aber es functioniert irgendwie nicht:

Code: [AUSKLAPPEN]


Graphics3D 640,480,0,2
SetBuffer FrontBuffer()

d = 300
b = 50
c = 190
Repeat
  t = t + 1
  Y = QuadEaseInOut(t,b,c,d)
  Plot t,Y + 300
  Delay 10
Until KeyHit(1)

Function QuadEaseInOut(t,b,c,d)
  t = t/d/2
  If t < 1 Then Return c/2*t*t + b   
  Return -c/2 * ((t-1)*(t-2) - 1) + b
End Function



Function ElasticEaseInOut(t,b,c,d,a,p)
   if t = 0 then return b
   if a < abs(c) then
     a = c
     local s = p/4
   else
     local s = p/(2*PI)*asin(c/a)
   EndIf
   u = t - 1
   if t < 1 then return -.5*(a*Math.pow(2,10*(u)*sin((t*d-s)*(2*pi)/p))+b then
     return a* Math.pow(2,-10*(u))*sin((t*d-s)*(2*Pi)/p)*.5 + c + b
   end if
End Function




die Function ElasticEaseInOut funktioniert nicht, da ich nicht weis, was der befehl Math.pow macht. und es gibt warscheinlich noch mehr fehler.
könntet ihr mir vielleicht weiterhelfen? Rolling Eyes

Goodjee

BeitragMo, Jun 19, 2006 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
math.pow ist die potenz...also a^b
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Dreamora

BeitragMo, Jun 19, 2006 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
das local war ein fehler meinerseits. Das braucht es nicht, sonst kann (wird ziemlich sicher) es zu problemen führen.
Sorry wegen dem
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Goodjee

BeitragMo, Jun 19, 2006 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
was soll diese zeile:
Code: [AUSKLAPPEN]
if t < 1 then return -.5*(a*Math.pow(2,10*(u)*sin((t*d-s)*(2*pi)/p))+b then
     return a* Math.pow(2,-10*(u))*sin((t*d-s)*(2*Pi)/p)*.5 + c + b
   end if


if return then return???
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Iguan

BeitragMo, Jun 19, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm aber die function QuadEaseInOut funktioniert ja schon nicht. Dort kommt die zeile mit dem Local gar nicht vor, und auch nicht Math.Pow...

was ist denn an dieser einfachen kleinen funktion falsch...?

die Function ElasticEaseInOut werde ich wohl aufgeben müssen... bin absolut kein Mathe-Genie, und die Übersetzung nach BB ist sauschwer! Wichtig ist mir aber die Quad-Funktion!

seht ihr da noch fehler?

Goodjee

BeitragMo, Jun 19, 2006 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
was sollte sie denn tuen wenns funzt???

wenn sie ne kurve malen soll dann musst du alle vars (parameter) zu floats machen und der funktion floats als rückgabewert geben
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

lucifer

BeitragMo, Jun 19, 2006 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
((--t)*(t-2) - 1)
=> ((t-1)(t-2) - 1)


Stimmt nicht. --t dekremtneirt die variable.
Es müsste also eignetlich heißen:
t = t - 1
(t*(t-2) - 1)
Aktuelles Projekt:
Demonspawn
RPG
 

Dreamora

BeitragMo, Jun 19, 2006 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

const Pi# = 3.15149
Function ElasticEaseInOut(t,b,c,d,a,p)
   if t = 0 then return b

   if a < abs(c) then
     a = c
     s = p/4
   else
     s = p/(2*PI)*asin(c/a)
   EndIf
   u = t - 1
   if t < 1 then
     return -.5*(a*2^(10*(u))*sin((t*d-s)*(2*Pi)/p))+b
   else
     return a* 2^(-10*(u))*sin((t*d-s)*(2*Pi)/p)*.5 + c + b
   end if
End Function
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Iguan

BeitragMo, Jun 19, 2006 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
also, die Quatratische-Ease-Funktion funktioniert jetzt einigermassen...

Code: [AUSKLAPPEN]


Graphics3D 640,480,0,2
SetBuffer FrontBuffer()

d# = 70
b# = 10
c# = 140
Repeat
  t# = t# + 1
  If t# > d#*3 Then Cls: T# = 0
  Y# = QuadEaseInOut(t#,b#,c#,d#)
   Plot 10+t#,Y# + 100
   Delay 10
Until KeyHit(1)

Function QuadEaseInOut(t#,b#,c#,d#)
  t# = t#/d#/2
  If t# < 1 Then Return c#/2*t#*t# + b#   
  Return Float(-c/2 * ((t#-1)*(t#-2) - 1) + b#)
End Function



sieht zwar nicht ganz so aus wie auf dieser seite:
http://www.robertpenner.com/ea..._demo.html

@Dreamora: Danke für deine Übersetzung, es tut sich jetzt immerhin schon was(ganz links der kurve des folgenden codes), aber eine kurve gibt es nicht wirklich... ich habs jetzt so gemacht:


Code: [AUSKLAPPEN]

SetBuffer FrontBuffer()

Const Pii# = 3.14159

d# = 700
b# = 120
c# = 140
a# = 200
p# = 100
Repeat
  t# = t# + 1
  Y# = ElasticEaseInOut(t#,b#,c#,d#,a#,p#)
   Plot 10 + t#,Y# + 100
   Delay 10
Until KeyHit(1)

Function ElasticEaseInOut(t#,b#,c#,d#,a#,p#)
   If t# = 0 Then Return b#
   If a# < Abs(c#) Then
     a# = c#
     s# = p#/4
   Else
     s# = p#/(2*Pii#)*ASin(c#/a#)
   EndIf
   u# = t# - 1
   If t# < 1 Then
     Return -.5*(a#*2^(10*(u#))*Sin((t#*d#-s#)*(2*Pii#)/p#))+b#
   Else
     Return a#* 2^(-10*(u#))*Sin((t#*d#-s#)*(2*Pii#)/p#)*.5 + c# + b#
   End If
End Function

Goodjee

BeitragDi, Jun 20, 2006 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
mach noch ein # nach den funktionsnamen
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group