l'algorithme de calcul de la pente entre la ligne relativement au centre de coordonnées

StackOverflow https://stackoverflow.com/questions/4085687

  •  28-09-2019
  •  | 
  •  

Question

S'il vous plaît aider à l'algorithme de calcul de la pente Nous avons donc un système de coordonnées cartésiennes. X à droite Y en haut. Il y a une ligne qui passe par le centre de coordonnées. Nécessaires pour déterminer l'angle par rapport à l'axe OX.

Alors, voici ce que je fais

  1. Certaines fonctions transférées à l'origine (ligne supérieure) et de fin de ligne
  2. Déterminer dx, dy
  3. NFANTS libère deux paramètres dans atan2 (dy, dx)
  4. Retourne le résultat en radians.

Mais! J'ATan2 ne fonctionne que dans les 180 degrés. Après 180 va dans une autre direction.

La question: quel est l'algorithme correct pour trouver l'angle? Ai-je besoin de prendre dy, les valeurs de dx en grandeur? Comment faire l'arctangente calculé pour tous les 360 et plus? Je serais heureux d'entendre des algorithmes spécifiques, ou des morceaux de commentaires de code. Thanx!

static inline CGFloat angleBetweenLinesInRadians2 (CGPoint line1Start, CGPoint line1End)
{
CGFloat dx = 0, dy = 0;

dx = line1End.x - line1Start.x; / / whether to do fabs (line1End.x - line1Start.x);
dy = line1End.y - line1Start.y;

CGFloat rads = atan2 (dy, dx); / / whether to do fabs (rads)

return rads;
}
Était-ce utile?

La solution

atan2 () est censé renvoyer une valeur dans l'intervalle [-pi, pi] (par exemple [-180, 180]), et travaille avec les signes de x et y de déterminer le quadrant. ( C ++ ref )

Ainsi, techniquement, vous avez 360 degrés.

Autres conseils

Une formule pour calculer un angle de 0 à 360 degrés:

f (x, y) = 180-90 * (1 + sign (x)) * (1-sign (y ^ 2)) - 45 * (2 + sign (x)) * sign (y)

    -180/pi()*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))

    x=x2-x1 and y=y2-y1 .
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top