Matemática 3D: Calcule o ângulo do banco (rolo) a partir de vetores ortogonais de look e UP

StackOverflow https://stackoverflow.com/questions/3065070

  •  28-09-2019
  •  | 
  •  

Pergunta

Espero que este seja o local adequado para fazer esta pergunta que é o o mesmo que este, mas expresso como matemática pura em vez de graficamente (pelo menos espero traduzir o problema para a matemática corretamente).

Considerando:

  • Dois vetores que são ortogonais: UP (UX, UY, UZ) e Look (LX, LY, LZ)
  • um plano p que é perpendicular à aparência (daí, inclusive para cima)
  • Y1, que é a projeção de y (eixo vertical) junto com P para P

Pergunta: Qual é o valor do ângulo entre Y1 e UP?

Como os matemáticos concordam, essa é uma pergunta muito básica, mas eu tenho coçado a cabeça há pelo menos duas semanas sem poder visualizar como projetar y para p ... talvez agora velho demais para encontrar soluções para exercícios escolares.

Estou procurando a solução trigonométrica, não uma solução usando uma matriz. Obrigado.

Editar: Descobri que precisava determinar o sinal do ângulo, em relação a um eixo de rotação que precisava ser uma aparência. Publiquei o código final na minha pergunta vinculada (veja o link acima). Obrigado àqueles que ajudaram. Eu aprecio seu tempo.

Foi útil?

Solução

Estou apenas fazendo isso no papel. Espero que esteja certo.

Vamos assumir e olhar normalizados, isto é, comprimento 1. Digamos que o plano p contém a origem e l é normal. Y é (0, 1, 0)

Para projetar y em P, encontre sua distância para p ...

d = Y dot L = ly

... e então escala o normal por -d para obter o y1 (ou seja, a projeção de y em p)

Y1 = (lx * ly, ly * ly, lz * ly)

Agora normalize Y1, isto é, escala -o por (1 / comprimento). Se seu comprimento era 0, você está sem sorte.

O produto dot de y1 e up = o cosseno do ângulo. Então

angle = acos(Y1 dot Up)

Outras dicas

  • Dois vetores que são ortogonais: UP (UX, UY, UZ) e Look (LX, LY, LZ)
  • um plano p que é perpendicular à aparência (daí, inclusive para cima)
  • Y1, que é a projeção de y (eixo vertical) junto com P para P

Vou assumir e procurar vetores de unidade. Seja y = (0,1,0).
Vamos encontrar Y1.

Y1 = y - (y * look) * look y1 = y - ly * look y1 = (-lylx, 1 - lyly, -ly*lz)

Observe que Y1 será (0,0,0) quando a aparência for (0,1,0) ou (0, -1,0).

Como Detmar disse, encontre o ângulo entre Y1 e a UP normalizando Y1 e encontrando os ArcCos de Y1 * Up (onde * é o produto DOT)

Este é um problema relativamente simples usando matemática vetorial. Use o equação para projeção vetorial Para obter y1, então o Equação trigonométrica para o produto DOT Para obter o ângulo entre Y1 e Up.

Essas equações seriam muito fáceis de se implementar em praticamente qualquer idioma, mas se você estiver fazendo esse tipo de pergunta, pode estar pretendendo fazer mais matemática vetorial pesada; nesse caso, eu sugiro tentar encontrar um terceiro -Parcary Party.

Você precisa saber sobre vetores no espaço 3D. Eu acho que um entendimento fundamental desses, especialmente pontos e produtos cruzados, o resolverá. Procure um livro de vetores elementares.

Dois vetores que são ortogonais: UP (UX, UY, UZ) e Look (LX, LY, LZ)

Os vetores ortogonais têm um produto de ponto zero.

um plano p que é perpendicular à aparência (daí, inclusive para cima)

Se você aceitar o produto cruzado da pesquisa, receberá o terceiro vetor que, junto com a UP, define o plano perpendicular para procurar.

Y1, que é a projeção de y (eixo vertical) junto com P para P

Não sei o que você está conseguindo aqui, mas o produto DOT de qualquer vetor com look oferece a magnitude do seu componente na direção da aparência.

Se y = (0,1,0) então

Y1 = (-lylx, 1 - lyly, -ly*lz)

| Y1 | = sqrt (y1x^2 + y1y^2 + y1z^2)

| Up | = sqrt (upx^2 + upy^2 + upz^2)

Ângulo do banco = (y1xUPX + Y1YUPY + Y1ZUpz)/(| y1 || Up |)

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