Pergunta

Eu tenho um ponto P e 2 segmentos de linha em um avião 2D. O ponto P é um local de visão de onde a câmera está olhando para os segmentos de linha. Quero verificar se o segmento 1 da linha está parcial ou totalmente escondido atrás da linha 2, quando olha do ponto P.

Foi útil?

Solução

Eu acho que a questão é se a segunda linha é "mascarada" pela primeira linha.

Digamos que seu ponto de câmera seja C e seus segmentos são A1, A2 e B1, B2.

Eu calculava os produtos cruzados CA1XCB1 e CA2XCB2. O sinal lhe dará se o ponto se o ponto B1 estiver à esquerda ou à direita da linha CA1. Depende de como seus triângulos CA1A2 e CB1B2 são orientados (eles devem ser orientados da mesma forma, são muitas maneiras de fazer isso).

Você pode usar o sinal para saber se está nos seguintes casos:

  • CA1XCB1 é negativo ou CA2XCB2 é positivo, então parcialmente visível
  • o oposto, depois escondido.

Você também pode calcular CA1XCB2 e CA2XCB1 para ter casos de granulação multitados.

Outras dicas

A resposta de Slurdge é um bom começo, mas é um pouco mais complicado do que isso.

Se o segmento de linha 2 estiver mais próximo de C do que o segmento 1 da linha, ainda pode ser visível, por exemplo

A1-------A2

  B1-B2


   C

Aqui B1 e B2 estão "dentro" do setor A1A2, mas não estão ocultos.

O mais difícil de se exercitar é se B1 está 'entre' A1 e A2, mas mais próximo da câmera, enquanto B2 não está entre 'A1 e A2, mas mais longe da câmera:

             B2

A1-----A2
 B1


   C

O B1B2 pode prender a borda do segmento de linha, tornando assim uma pequena porção de B1B2 escondida (ou talvez não!). Eu acho que você teria que encontrar a interseção de A1A2 e B1B2 para verificar se isso realmente acontece.

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