xlight = cosf(angle_to_light);
ylight = sinf(angle_to_light);
xrotate = A*xlight;// - B*xrepel;// + C*xrandom;
yrotate = A*ylight;// - B*yrepel;// + C*yrandom;
angle_to_rotate = acosf( xrotate/( sqrtf(xrotate*xrotate + yrotate*yrotate) ) );
//printf("xrotate = %f, yrotate = %f, rotate = %f\n", xrotate, yrotate, angle_to_rotate);
if (angle_to_rotate>0) {
set_motors(0,kilo_turn_right);
}
else if (angle_to_rotate<0) {
printf("hello\n" );
set_motors(kilo_turn_left,0);
}
По какой-то причине я никогда не получаю отрицательное значение для angle_to_rotate. В основном мой код никогда не печатает «привет». angle_to_light может быть +ve или -ve в радианах? как именно работает acosf в С++? пожалуйста помоги
1 ответ
Согласно документации, функция acosf
возвращает значения в диапазон [0;π].
Математически arccos является многозначной функцией; в частности, cos X == cos -X. Функция C++ может возвращать только одно репрезентативное значение, и они выбрали этот диапазон. Вы можете получить другие значения, добавив 2π и/или отрицая .
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.