Синусоида и производная функция - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть какой-то объект, который движется синусоидой.Я должен анимировать его каждый раз, когда он достигает вершины (или дна) «волны».Я хочу сделать это с производной функцией: как мы знаем, она меняет значение (с положительного на отрицательное или наоборот) в этих точках.Таким образом, код:

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

И анимация тоже странная.Не только на вершине волны.Что там не так?

Ответы [ 2 ]

8 голосов
/ 21 декабря 2010

У вас есть

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

производная от этого

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

не

y' = -cos(y)
2 голосов
/ 21 декабря 2010

Вы делаете свою математику неправильно.Производная от sin (x) - это cos (x), а не cos (sin (x)).

должно быть

float tempValue = cosf(k2 * Deg2Rad(x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...