atan2(y,x) a cette discontinuité à 180° où il passe à -180°..0° dans le sens des aiguilles d'une montre.
Comment faire correspondre la gamme de valeurs à 0°..360° ?
Voici mon code :
CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width);
Je calcule la direction d'un événement tactile de glissement à partir des points de départ et d'arrivée, tous deux des structures de points XY. Le code est pour l'iPhone mais tout langage qui supporte atan2f() fera l'affaire.
Merci pour votre aide, tant pour la solution générale que pour le code.
Mise à jour : J'ai transformé la réponse d'erikkallen en une fonction avec de jolis noms de variables longs pour que je la comprenne dans 6 mois. Peut-être que cela aidera d'autres novices de l'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;
}