Easing.. von C++ zu BB
Übersicht

![]() |
IguanBetreff: Easing.. von C++ zu BB |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
((--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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
WOW! das ging aber schnell!! Vielen dank, das werde ich gleich mal probieren! | ||
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group