Parece uma pergunta rápida e fácil, mas não consegui encontrar exatamente o que estou procurando:
Como calcular um vetor de comprimento unitário que está apontando ao longo da linha que é exatamente 50% do ângulo de dois segmentos de linha conectados?
Uma imagem fala mais que mil palavras (que também são melhores do que minha explicação!).
Então, basicamente, eu quero calcular o vetor de unidade azul, considerando os dois segmentos de linha vermelha (que na verdade são 3 pontos e, portanto, garantem a conexão)
Os segmentos vermelhos são arbitrários e o resultado não precisa ser uma unidade, seria apenas mais fácil para mim.
Também seria útil ter uma maneira de forçar o vetor resultante a apontar em uma determinada direção (em relação aos segmentos de entrada), isso não é essencial, pois acho que posso resolver isso - pois os segmentos de linha de entrada acabam se formando um n-gon.
Quaisquer exemplos seriam ideais em C ++, por favor, mas outros idiomas são bem-vindos.
Muito obrigado por qualquer indicação.
fonte
Eu acho que você pode obter uma direção consistente, tratando isso como se estivesse gerando um vértice 2D normal. Isso é:
Pegue em cada um dos vetores vermelhos, troque os componentes xey e negue um deles para criar os normais.
Normalize-os.
Soma esses dois vetores e renormalize.
Você provavelmente também desejará testar o caso em que as duas linhas vermelhas se sobrepõem - a renormalização final tentará dividir por zero lá.
fonte
Seja A e B seus vetores:
Os vetores somadores não precisam ser vetores unitários, mas simplesmente iguais em comprimento; portanto, se | A | > = | B |, você pode:
que é mais numericamente estável, já que você tem apenas uma fração e o denominador maior
O mesmo resultado pode ser obtido por subtração, mais uma vez os vetores devem ter o mesmo comprimento
Isso funciona apenas para ângulos não convexos; você pode simplesmente testar se seu ângulo é convexo e multiplicar H por -1
fonte