2010-12-21 126 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));