Obtenez l'angle de 2 positions
J'ai 2 objets et quand je bouge, je veux obtenir l'angle de l'autre.
Par exemple:
Object1X = 211.000000, Object1Y = 429.000000
Object2X = 246.500000, Object2Y = 441.500000
J'ai essayé ce qui suit, et à chaque variation sous le soleil:
double radians = ccpAngle(Object1,Object2);
double degrees = ((radians * 180) / Pi);
Mais je viens d'obtenir 2.949023 retourné là où je veux quelque chose comme 45 degrés etc.
source d'informationauteur Jonathan Ogle-Barrington
Vous devez vous connecter pour publier un commentaire.
Cette autre réponse de l'aide?
Comment carte atan2() pour 0-360 degrés
Je l'ai écrit comme ceci:
L'exécution du code:
Et cela renvoie 45.
Espère que cette aide.
J'ai modifié @tomas solution d'être simplifiée. Il est probable (c'était pour moi) que de math va être appelé fréquemment.
Dans mon incarnation, vous avez à effectuer la différence entre les deux points de soi-même (ou si vous avez de la chance, (0,0) est déjà l'un de vos points). La valeur calculée est la direction du point de (0, 0). Oui, c'est assez simple et vous pourriez inline, si vous le voulez vraiment. Ma préférence est pour un code plus lisible.
J'ai aussi converti à l'appel de la fonction:
Si vous ne voulez pas de valeurs négatives, vous avez besoin de convertir-le vous-même. Les valeurs négatives ont été très bien pour moi - pas besoin de faire des calculs inutiles.
J'ai été en utilisant ce dans un cocos2d de l'environnement, c'est la façon dont je l'appelle: (Mathématiquement, nous sommes en train de traduire l'avion pour faire
p0
l'origine. Ainsi, en soustrayantp0
dep1
(p0
-p0
= {0,0}). Les angles sont inchangés lorsque l'avion est traduit.)ccpSub
est fourni par cocos2d, c'est la soustraction d'un tuple - vous pouvez le faire vous-même si vous n'avez pas que la dispositionde côté: il est généralement pas très poli de style pour le nom de la méthode que ci-dessus avec le
CG___
schéma de nommage, qui identifie la fonction dans le cadre deCoreGraphics
- donc, si vous voulez renommerMyConvertCGPointToBearing()
ouFredLovesWilma()
alors vous devriez le faire.Voici comment je le fais à Swift pour ceux qui sont intéressés, il est basé sur @bshirley la réponse ci-dessus w/quelques modifications apportées à l'aide de match à la calayer système de rotation:
Cela fournit un système de coordonnées comme ceci:
Utilisation:
Il n'y a pas d'angle entre deux points. Si vous voulez connaître l'angle entre les vecteurs à partir de l'origine (0,0) pour les objets, utilisez le scalaire (dot) du produit:
Les mathématiques std lib de la langue que vous utilisez sûrement fournit des fonctions pour arcus cosinus, produit scalaire et de la longueur.