Parece una pregunta rápida y fácil, pero no he podido encontrar exactamente lo que estoy buscando, así que:
¿Cómo calcular un vector de longitud unitaria que apunta a lo largo de la línea que es exactamente el 50% del ángulo de dos segmentos de línea conectados?
Una imagen dice miles de palabras (¡eso también es mejor que mi explicación!)
Así que básicamente quiero calcular el vector de la unidad azul dados los dos segmentos de línea roja (que en realidad son 3 puntos y, por lo tanto, se garantiza que estén conectados)
Los segmentos rojos son de longitud arbitraria, y el resultado no tiene que ser una unidad, simplemente sería más fácil para mí.
También sería útil tener una manera de forzar el vector resultante para que apunte en una determinada dirección (en relación con los segmentos de entrada), esto no es esencial ya que creo que puedo resolverlo, ya que los segmentos de línea de entrada finalmente se forman un n-gon
Cualquier ejemplo sería ideal en C ++, pero otros lenguajes son bienvenidos.
Muchas gracias por cualquier puntero.
fuente
Creo que puede obtener la dirección para ser consistente si trata esto como si estuviera generando un vértice 2D normal. Es decir:
Tome cada uno de los vectores rojos, intercambie los componentes x e y y niegue uno de ellos para crear las normales.
Normalizarlos
Suma esos dos vectores y renormaliza.
Probablemente también desee probar el caso en el que las dos líneas rojas se superponen entre sí: la renormalización final intentará dividir por cero allí.
fuente
Deje que A y B sean sus vectores:
Los vectores sumadores no necesitan ser vectores unitarios, sino simplemente de igual longitud, de modo que si | A | > = | B |, puedes:
que es más estable numéricamente ya que solo tiene una fracción y el denominador más grande
Se puede obtener el mismo resultado por sustracción, una vez más, los vectores deben tener la misma longitud
Esto funciona solo para ángulos no convexos; simplemente puede probar si su ángulo es convexo y multiplicar H por -1
fuente