Dados os 4 pontos que descrevem 2 segmentos de linha, como você calcula se a linha A está na direção ou fora da linha B?
As 2 linhas têm um comprimento fixo e podem ser medidas como distância de x1 / y1 a x2 / y2.
Dados os 4 pontos que descrevem 2 segmentos de linha, como você calcula se a linha A está na direção ou fora da linha B?
As 2 linhas têm um comprimento fixo e podem ser medidas como distância de x1 / y1 a x2 / y2.
Respostas:
Seja A
e B
seja dois pontos na linha preta. Deixe C
e D
seja seu segmento azul. O sinal da z
coordenada do produto cruzado AB^AC
informa se C
está "esquerdo" ou "direito" da linha preta. Da mesma forma, o produto cruzado AB^CD
informa se a CD
direção é "esquerda" ou "direita" da linha preta.
Realmente não queremos saber se é esquerda ou direita; tudo o que queremos é garantir que eles estejam na mesma direção ou na direção oposta, por isso multiplicamos os dois valores.
O pseudocódigo a seguir deve, portanto, funcionar:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Receio que precise de algum tempo para escrever uma solução adequada para a curva de Bezier. A situação a seguir está em direção ou fora?
Assumindo que o ponto inicial é o círculo verde e o ponto final é a seta vermelha
Calcule a distância entre o ponto inicial como DS e o segmento preto e faça o mesmo para o ponto final (seta vermelha) que DE. Se DS> DE, o segmento está apontando para. se DE> DS, está apontando para fora. Se ambos são iguais, os dois são paralelos.
Você pode descobrir como calcular a distância de um ponto a um segmento aqui e a uma curva de bezier quadrática aqui . No entanto, dependendo da forma da curva bezier, ela pode retornar resultados estranhos (a curva pode estar se cruzando)