у меня есть этот кусок кода
bool Position::HasInLine(const Unit * const target, float distance, float width) const
{
if (!HasInArc(M_PI, target) || !target->IsWithinDist3d(m_positionX, m_positionY, m_positionZ, distance))
return false;
width += target->GetObjectSize();
float angle = GetRelativeAngle(target);
float absSin = abs(sin(angle));
return abs(sin(angle)) * GetExactDist2d(target->GetPositionX(), target->GetPositionY()) < width;
}
Проблема, с которой я столкнулся, состоит в том, что, когда я отлаживаю с помощью gdb и пытаюсь «p sin (angle)», он возвращает странные значения - для угла 1.51423 он утверждает, что sin = 29 (так что да, я помещаю в радианах :-) ). Более странно, что когда я пытаюсь "p absSin", он всегда возвращает 0, и да, я был на следующей строке, поэтому строка "float absSin = abs (sin (angle))" уже была сделана.
Первоначально там не было даже cmath, но константа M_PI возвращала правильное значение, хотя я добавил #include в начале файла .cpp просто для уверенности, но ничего не изменилось.
Если это поможет, я использую ядро Linux 2.6.26-2-xen-amd64
Есть идеи?