2010-12-21 79 views
0

我有一些物體以正弦曲線移動。每次到達「波浪」的頂部(或底部)時,我都必須進行動畫處理。我想用微分函數來做到這一點:正如我們所知,它在這一點上改變了數值(從正值到負值或相反)。因此,代碼爲:正弦曲線和微分函數

// 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; 

,如果我將輸出tempValue它顯示陌生號碼:

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 

和動畫是奇怪了。不僅在潮流的頂端。那裏有什麼問題?

+1

如果f(x)= k1 * sinf(k2 * Deg2Rad(x))+ y_base,則不是'f'(x)= k1 * k2 * cosf(k2 * Deg2Rad(x))' – 2010-12-21 20:12:13

回答

8

你的那

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

衍生物

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

y' = -cos(y) 
2

你正在做你的數學錯了。 sin(x)的導數是cos(x),而不是cos(sin(x))。

應該

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