Comment calculer l'angle réflexe donné deux vecteurs dans l'espace 3D Stack Overflow
Je veux calculer l'angle entre deux vecteurs a et b. Laisse supposer ceux-ci sont à l'origine. Cela peut être fait avec
EDIT: Je voulais garder la question générale, mais ici nous allons. Je suis dans la programmation de ce c et le code que j'utilise pour obtenir l'angle est thêta = ACOS (point (a, b) / mag (a) * mag (b)) alors comment voulez-vous déterminer par programme l'orientation?
Je suis venu avec la solution suivante qui profite du changement de direction du produit croisé des deux vecteurs:
Faire un vecteur n = a X b et normaliser. Ce vecteur est normal au plan enjambé par a et b.
Chaque fois qu'un nouvel angle est calculé comparer avec l'ancien normal. Dans la comparaison, traiter les anciens et les actuels Normales comme points et calculer la distance entre eux. Si cette distance est 2 la normale (à savoir le produit croisé a X b est retournée).
Vous voudrez peut-être avoir un seuil pour la distance que la distance après un flip peut être plus courte que 2, selon la façon dont les vecteurs a et b sont orientés et la façon dont vous mettez à jour souvent l'angle.
Une solution que vous pouvez utiliser:
Ce que vous devez effectivement faire est de créer un plan que l'un des vecteurs est coplanaires.
Obtenir le produit croisé des deux vecteurs va créer un plan, puis est que vous obtenez la normale de ce plan, vous pouvez obtenir l'angle entre ceci et le vecteur dont vous avez besoin pour obtenir l'angle signé, et vous pouvez utiliser l'angle pour déterminer la signe.
Si l'angle est supérieur à 90 degrés, alors il est en dessous du plan créé; moins de 90 degrés, et il est au-dessus.
Selon le coût des calculs, le produit scalaire peut être utilisé à ce stade au lieu de l'angle.
Assurez-vous que vous calculez toujours les Normales par le même ordre de vecteurs.
Ceci est utilisable plus facilement si vous utilisez les axes XYZ, et c'est ce que vous comparez contre, puisque vous avez déjà les vecteurs nécessaires pour le plan.
Il y a possbly solutions plus efficaces, mais c'est celui que je suis venu avec.
Edit: clarification des vecteurs créés a X b = p. Ceci est perpendiculaire à la fois a et b. Ensuite, faites: a X p ou b X p pour créer un autre vecteur qui est la normale au plan créé par les 2 vecteurs. Le choix du vecteur dépend sur lequel vous essayez de trouver l'angle pour.
Strictement parlant, deux vecteurs 3D ont toujours deux angles entre eux - un inférieur ou égal à 180, l'autre supérieure ou égale à 180. Arccos vous donne l'un d'eux, vous pouvez obtenir l'autre en soustrayant de 360. penser de cette façon : imaginez deux lignes se croisent. Vous avez 4 angles là - 2 d'une valeur, 2 d'un autre. Quel est l'angle entre les lignes? Pas de réponse unique. Pareil ici. Sans une sorte de critères supplémentaires, vous ne pouvez pas, en théorie, dire laquelle des deux valeurs d'angle doivent être prises en compte.
EDIT: Donc, ce que vous avez vraiment besoin est un exemple arbitraire de fixer une orientation. Voici une: nous regardons de la direction Z positive. Si le plan entre les deux vecteurs contient l'axe Z, nous regardons de la direction Y positive. Si l'avion est YZ, nous attendons de la direction positive X. Je pense que la façon d'exprimer en coordonnées sous forme, puis modifier à nouveau.