Scheint eine schnelle und einfache Frage zu sein, aber ich konnte nicht genau das finden, wonach ich suche:
Wie berechnet man einen Einheitslängenvektor, der entlang der Linie zeigt, die genau 50% des Winkels zweier verbundener Liniensegmente entspricht?
Ein Bild sagt mehr als tausend Worte (das ist auch besser als meine Erklärung!).
Im Grunde möchte ich den blauen Einheitsvektor anhand der beiden roten Liniensegmente berechnen (die eigentlich 3 Punkte sind und daher garantiert miteinander verbunden sind).
Die roten Segmente haben eine beliebige Länge und das Ergebnis muss keine Einheit sein, es wäre einfach einfacher für mich.
Es wäre auch praktisch, eine Möglichkeit zu haben, den resultierenden Vektor zu zwingen, in eine bestimmte Richtung zu zeigen (relativ zu den Eingabesegmenten). Dies ist nicht unbedingt erforderlich, da ich denke, dass ich dieses herausarbeiten kann - da sich letztendlich die Eingabezeilensegmente bilden ein n-gon.
Alle Beispiele wären in C ++ ideal, aber andere Sprachen sind willkommen.
Vielen Dank für Hinweise.
quelle
Ich denke, Sie können die Richtung konsistent machen, indem Sie dies so behandeln, als würden Sie eine 2D-Scheitelpunktnormalen erzeugen. Das ist:
Nehmen Sie jeden der roten Vektoren, tauschen Sie die x- und y-Komponenten aus und negieren Sie eine davon, um die Normalen zu erstellen.
Normalisiere sie.
Summiere diese beiden Vektoren und renormiere sie.
Sie möchten wahrscheinlich auch testen, ob sich die beiden roten Linien überlappen - die endgültige Renormierung versucht dort, durch Null zu teilen.
quelle
Lassen Sie A und B Ihre Vektoren sein:
Die Summierungsvektoren müssen keine Einheitsvektoren sein, sondern sind einfach gleich lang, wenn | A | > = | B | können Sie:
Das ist numerisch stabiler, da Sie nur einen Bruchteil und den größeren Nenner haben
Das gleiche Ergebnis kann durch Subtraktion erhalten werden, wiederum müssen die Vektoren gleich lang sein
Dies funktioniert nur für nicht konvexe Winkel. Sie können einfach testen, ob Ihr Winkel konvex ist, und H mit -1 multiplizieren
quelle