Pergunta

Eu tenho um triângulo no espaço 3D definido por seus 3 vértices, p0, p1 e p2.

Desejo calcular um plano neste espaço 3D que fica ao longo de P0 e P1 e enfrenta um terceiro ponto, p2.

Este avião deve ser definido por uma posição e direção normalizada/

Além de deitar -se ao longo de P0 e P1, e de frente para P2, o avião também deve ser perpendicular ao plano criado por P0, P1 e P2

Eu lutei com isso por um bom tempo e qualquer ajuda que alguém possa oferecer é muito apreciada.

Foi útil?

Solução

Sua pergunta está mal posta. Para qualquer avião que esteja em P0 e P1, haverá algum ponto nesse plano que "enfrente" o ponto P2. Então, tudo o que resta para calcular é algum avião ao longo de P0 e P1.

normal = normalize(cross(p1-p0, pX-p0))  //pX is anything except p1
planePoint = p0

EDITAR: Ver comentários

Aqui está um exemplo da minha explicação de comentário

oitava: 14> p0
p0 =

0 0 0

oitava: 15> P1
p1 =

0 0 5

oitava: 16> P2
p2 =

5 0 0

oitava: 17> cruz (P1-P0, Cross (P1-P0, P2-P0))
Ans =

-125 0 0

Você notará que o sinal está errado, jogue com a ordem dos parâmetros no produto cruzado para que ele volte à maneira certa. Também não se esqueça de normalizar ... mas isso não afetará a direção. Verifique também para garantir que a norma após cada produto cruzado não esteja perto de 0, caso contrário, não há resposta única .. (Triângulo forma uma linha)

Outras dicas

A menos que eu esteja entendendo mal o que você está pedindo, um vetor da linha para P2 será o normal para o avião que você está tentando definir. Basicamente, você constrói uma linha em ângulos retos na linha P0-P1, passando pelo P2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top