2010-12-21 7 views
0

Ich habe ein Objekt, das sich von sinusoid bewegt. Ich muss es jedes Mal animieren, wenn es die Spitze (oder den Boden) der "Welle" erreicht. Ich möchte dies mit der Ableitungsfunktion tun: Wie wir wissen, ändert es den Wert (von positiv zu negativ oder umgekehrt) an diesen Punkten. So ist der Code:Sinusoid und derivative Funktion

// Start value 
int functionValue = +1; 

// Function 
float y = k1 * sinf(k2 * Deg2Rad(x)) + y_base; 

// Derivative function 
float tempValue = -cosf(y); 

// Check whether value is changed 
if (tempValue * functionValue < 0) 
{ 
    animation = true; 
} 
functionValue = tempValue; 

wenn ich Ausgang der tempValue es seltsam Zahlen zeigt:

0.851513 
0.997643 
0.0242145 
0.690432 
0.326303 
-0.614262 
0.892036 
0.1348 
0.709843 
0.968676 
0.0454846 
0.920602 
-0.423125 
0.692132 
-0.960107 
0.0799654 
-0.747722 
-0.635241 
0.148477 
-0.98611 
0.900912 
-0.877801 
0.811632 
-0.362743 
-0.233856 
0.35512 
-0.994107 
0.885184 
-0.468005 
0.982489 
0.675337 
0.661048 
0.870765 
0.0312914 
-0.319066 
-0.602956 
-0.996169 
-0.95627 

und Animation zu fremd ist. Nicht nur an der Spitze der Welle. Was ist falsch ist da?

+1

Wenn 'f (x) = k1 * sinf (k2 * Deg2Rad (x)) + y_base', ist nicht' f '(x) = k1 * k2 * cosf (k2 * Deg2Rad (x)) 'seine Ableitung? –

Antwort

8

Sie haben

y = a * sin(b * x) + c 

Derivat davon ist

y' = a * b * cos(b * x) 

nicht

y' = -cos(y) 
2

Sie machen Ihre Mathe falsch. Ableitung von sin (x) ist cos (x), nicht cos (sin (x)).

sollte

float tempValue = cosf(k2 * Deg2Rad(x));