atan2 (y, x) имеет этот разрыв при 180 °, где он переключается на -180 ° ..0 ° по часовой стрелке.
Как отобразить диапазон значений на 0 ° ..360 °?
вот мой код:
CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width);
Я вычисляю направление события касания пальцем, учитывая startPoint и endPoint, обе структуры XY. Код для iPhone, но подойдет любой язык, который поддерживает atan2f ().
Спасибо за вашу помощь, ребята, с общим решением и кодом.
Обновление : Я превратил ответ Эриккалена в функцию с хорошими длинными именами переменных, поэтому я пойму его через 6 месяцев. Возможно, это поможет другому iPhone.
float PointPairToBearingDegrees(CGPoint startingPoint, CGPoint endingPoint)
{
CGPoint originPoint = CGPointMake(endingPoint.x - startingPoint.x, endingPoint.y - startingPoint.y); // get origin point to origin by subtracting end from start
float bearingRadians = atan2f(originPoint.y, originPoint.x); // get bearing in radians
float bearingDegrees = bearingRadians * (180.0 / M_PI); // convert to degrees
bearingDegrees = (bearingDegrees > 0.0 ? bearingDegrees : (360.0 + bearingDegrees)); // correct discontinuity
return bearingDegrees;
}