Cela semble être une question rapide et facile, mais je n'ai pas été en mesure de trouver exactement ce que je recherche donc:
Comment calculer un vecteur de longueur unitaire pointant le long de la ligne qui est exactement 50% de l'angle de deux segments de ligne connectés?
Une image parle des milliers de mots (qui sont aussi meilleurs que mon explication!)
Donc, fondamentalement, je veux calculer le vecteur d'unité bleu compte tenu des deux segments de ligne rouge (qui sont en fait 3 points et sont donc garantis pour être connectés)
Les segments rouges sont de longueur arbitraire, et le résultat n'a pas à être une unité, ce serait simplement plus facile pour moi.
Il serait également pratique d'avoir un moyen de forcer le vecteur résultant à pointer dans une certaine direction (par rapport aux segments d'entrée), ce n'est pas essentiel car je pense que je peux travailler celui-ci - car les segments de ligne d'entrée forment finalement un n-gon.
Tous les exemples seraient idéaux en C ++, mais d'autres langages sont les bienvenus.
Merci beaucoup pour tous les pointeurs.
la source
Je pense que vous pouvez obtenir une direction cohérente en traitant cela comme si vous génériez un sommet 2D normal. C'est:
Prenez chacun des vecteurs rouges, échangez les composants x et y et annulez l'un d'eux pour créer les normales.
Normalisez-les.
Additionnez ces deux vecteurs et renormalisez.
Vous voudrez probablement également tester le cas où les deux lignes rouges se chevauchent - la renormalisation finale essaiera de diviser par zéro à cet endroit.
la source
Soit A et B vos vecteurs:
Les vecteurs sommateurs n'ont pas besoin d'être des vecteurs unitaires mais simplement de longueur égale, donc si | A | > = | B |, vous pouvez:
qui est plus stable numériquement puisque vous n'avez qu'une fraction et le plus grand dénominateur
Le même résultat peut être obtenu par soustraction, encore une fois les vecteurs doivent être de longueur égale
Cela ne fonctionne que pour les angles non convexes; vous pouvez simplement tester si votre angle est convexe et multiplier H par -1
la source