Comment puis-je trouver l'angle entre 2 points dans pygame?
Je suis en train d'écrire un jeu en Python avec Pygame.
Le co-ords (de ma fenêtre d'affichage) sont
( 0 , 0 )
en haut à gauche et
(640,480)
en bas à droite.
L'angle est
0°
quand pointant vers le haut,
90°
quand pointant vers la droite.
J'ai un lecteur de sprite avec un centre de position et je veux la tourelle sur une arme à feu pour pointer vers le joueur. Comment dois-je faire?
Dire
x1
,y1
sont la tourelle co-ords
x2
,y2
êtes le joueur co-ords
a
est l'angle de mesure
En tant que futurs conseils, vous obtiendrez de meilleurs aider si vous donnera un aperçu de ce que vous avez déjà essayé, pourquoi il a échoué, et où vous avez besoin d'aide.
Vous avez besoin de trois points pour définir un angle.
Je pense que nous pouvons supposer un troisième point sur l'axe x positif, où l'origine est (x1,y1).
Ouvrez votre manuel de trigonométrie.
Vous avez besoin de trois points pour définir un angle.
Je pense que nous pouvons supposer un troisième point sur l'axe x positif, où l'origine est (x1,y1).
Ouvrez votre manuel de trigonométrie.
OriginalL'auteur Matt Randell | 2012-05-06
Vous devez vous connecter pour publier un commentaire.
D'abord,
math
a une pratiqueatan2(denominator, numerator)
fonction. Normalement, vous devriez utiliseratan2(dy,dx)
mais parce que Pygame d'inverser l'axe y par rapport à des coordonnées Cartésiennes (comme vous savez), vous aurez besoin de fairedy
négatif et puis éviter les angles. ("dy" signifie simplement "le changement de y".)degs
devrait être ce que vous cherchez.rads %= 2*pi
et l'utilisationrads = atan2(dy,dx)
; si vous tracez le triangle yo va voir pourquoi.Comme mentionné dans le post, Pygame ne pas utiliser les classiques des coordonnées Cartésiennes. Allez up est un réduction en y. D'où la négative, y et plage de correction (sinon vous obtiendrez -90 degrés au lieu de 270).
Depuis code remporte arguments, de jouer avec cette applet: github.com/mgold/Python-snippets/blob/master/pygame_angles.py
OriginalL'auteur mgold
Considérant un triangle
OriginalL'auteur ChristopheCVB
Vous voudrez probablement quelque chose comme cela - vous pouvez avoir besoin de bidouiller un peu - j'ai peut-être hors de 180 degrés. Vous aurez également besoin de cas à la situation où les dy==0, ce qui je ne l'ai pas fait pour vous.
if dy < 0
partie de ma solution, parce que atan2 prend soin d'elle automatiquementAussi, il est incorrect; le dy devrait être de plus de la dx, pas l'inverse.
Non, comme l'OP et mgold à la fois mentionné, 0 degrés a été définie de façon à être dans la direction y, il est donc dx/dy
Ahh ok my bad. C'est ce que je reçois pour ne pas les lire attentivement.
OriginalL'auteur happydave
OK, en utilisant une combinaison de vos réponses et quelques autres sites que j'ai trouvé le code de travail:
Le reste de mon code n'est pas pointilleux sur la valeur négative de degs; de toute façon, il travaille maintenant et je tiens à vous dire merci pour votre aide.
rads -= math.pi/2
. Aussi, juste parce que le code que vous avez accepte désormais négatif angles, code que vous écrivez dans l'avenir ne peut pas.Envisager d'accepter @mgold répondre
OriginalL'auteur Matt Randell