Le calcul des degrés entre 2 points avec inverse de l'axe Y
Je suis la création d'un simple jeu 2D en javascript/toile.
J'ai besoin de comprendre l'angle d'un objet par rapport à ma position.
Donc: dire que je suis au (10,10) et l'objet est à l' (10,5) - qui aurait pour conséquence de 90 degrés (positive Y est bas, négatif Y est)
(10,10) vs (10,15) serait de 270 degrés.
Comment pourrais-je aller à ce sujet?
- L'Angle de vision à partir d'où?
- Je suis confus quant à la façon dont vous êtes à la détermination de l'angle...êtes-vous confrontés dans une certaine direction tout le temps?
- À moins que j'ai mal compris, le point est de déterminer l'orientation du vecteur qui pointe à partir d'une position à l'autre.
- Ouais j'étais perdu là, j'ai compris ce qui se passait après avoir vu KennyTM réponse (rien de tel qu'une bonne réponse pour l'aider à donner du sens à une question)
Vous devez vous connecter pour publier un commentaire.
Supposez que vous êtes à (a, b) et que l'objet est à (c, d). Ensuite, la position relative de l'objet pour vous est (x, y) = (c - a d - b).
Alors vous pouvez utiliser les
Math.atan2()
function pour obtenir l'angle en radians.notez que le résultat est dans l'intervalle [-π, π]. Si vous avez besoin de nombres positifs, vous devez ajouter
et convertir des radians en degrés, multipliez par
180 /Math.PI
.Si vos coordonnées sont (xMe, yMe) et leurs coordonnées sont (xThem, yThem), alors vous pouvez utiliser la formule:
arctan((yMe-yThem)/(xThem-xMe))
Normalement, il serait
arctan((yThem-yMe)/(xThem-xMe))
, mais dans ce cas, le signe de l'axe des y est inversé.Pour convertir le résultat de radians en degrés, multipliez par 180/pi.
Donc en JavaScript, ce serait:
Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI
atan donne une valeur comprise entre -pi/2 et pi/2 (qui est, entre -90 et 90 degrés). Mais vous pouvez regarder ce quadrant votre (xThem - xMe, yMe - yThem) vecteur est et d'ajuster en conséquence.
En d'autres termes:
En HTML5 canvas l'origine est le coin supérieur gauche d'où l'axe y pousse du haut vers le bas. Donc, peu importe où vous êtes sur le cercle unité pour calculer l'angle d'Un point au centre(C) vous devez en effet faire comme
angle = Math.atan2(Cy-Ay,Ax-Cx)
et vous obtiendrez votre résultat dans la plage de [-π, π].
Je n'ai aucune idée pourquoi ils n'ont pas fait la toile d'origine le coin en bas à gauche.