Pergunta

Eu tenho jogado com alguns algoritmos na internet por um tempo e eu não consigo levá-los para o trabalho, por isso estou jogando a questão aqui;

Eu estou tentando tornar uma linha vetor velocidade de um ponto. Desenhando a linha não é difícil, basta inserir uma linha com velocity.length comprimento no gráfico. Isto coloca a linha centrada no ponto na direcção do eixo y. Precisamos levar isso agora na rotação adequada e tradução.

O vector de translação não é difícil de calcular: é metade do vetor velocidade. A matriz de rotação, no entanto, está sendo extremamente indescritível para mim. Dado um vetor <x, y, z> direcional, o que é a necessidade da matriz I?

Editar 1: olhar; se você não entender a pergunta, você provavelmente não será capaz de me dar uma resposta.

Aqui está o que eu tenho atualmente:

                    Vector3f translation = new Vector3f();
                    translation.scale(1f/2f, body.velocity);

                    Vector3f vec_z = (Vector3f) body.velocity.clone();
                    vec_z.normalize();

                    Vector3f vec_y; // reference vector, will correct later
                    if (vec_z.x == 0 && vec_z.z == 0) {
                        vec_y = new Vector3f(-vec_z.y, 0f, 0f); // could be optimized
                    } else {
                        vec_y = new Vector3f(0f, 1f, 0f);
                    }
                    Vector3f vec_x = new Vector3f();
                    vec_x.cross(vec_y, vec_z);
                    vec_z.normalize();

                    vec_y.cross(vec_x, vec_z);
                    vec_y.normalize();
                    vec_y.negate();

                    Matrix3f rotation = new Matrix3f(
                        vec_z.z, vec_z.x, vec_z.y,
                        vec_x.z, vec_x.x, vec_x.y,
                        vec_y.z, vec_y.x, vec_y.y
                    );

                    arrowTransform3D.set(rotation, translation, 1f);

este artigo . E sim, eu tentei a matriz de rotação standard (vec_x.x, vec_y.x, etc) e não funcionou. Eu estive girando as colunas e linhas para ver se há qualquer efeito.

Editar 2:

Desculpas sobre a redação rudes dos meus comentários.

Portanto, parece que houve uma combinação de dois erros; um dos quais House MD apontou (muito ruim de nomes de variáveis: vec_z era realmente vec_y, e assim por diante), eo outro era o que eu precisava para inverter a matriz antes de passá-lo para o motor de renderização (transposição foi por pouco!). Assim, o código modificado é:

                    Vector3f vec_y = (Vector3f) body.velocity.clone();
                    vec_y.normalize();

                    Vector3f vec_x; // reference vector, will correct later
                    if (vec_y.x == 0 && vec_y.z == 0) {
                        vec_x = new Vector3f(-vec_y.y, 0f, 0f); // could be optimized
                    } else {
                        vec_x = new Vector3f(0f, 1f, 0f);
                    }

                    Vector3f vec_z = new Vector3f();
                    vec_z.cross(vec_x, vec_y);
                    vec_z.normalize();

                    vec_x.cross(vec_z, vec_y);
                    vec_x.normalize();
                    vec_x.negate();

                    Matrix3f rotation = new Matrix3f(
                        vec_x.x, vec_x.y, vec_x.z,
                        vec_y.x, vec_y.y, vec_y.z,
                        vec_z.x, vec_z.y, vec_z.z
                    );
                    rotation.invert();
Foi útil?

Solução

Dupe.

A questão não envolve a obtenção de uma rotação a um determinado eixo, enquanto que eu estou preocupado com a obtenção de uma matriz de rotação.

Gee, eu me pergunto se você pudesse transformar convertido um para o outro ?

BTW, sua solução atual de escolher um eixo y arbitrária e, em seguida, reorthogonalising deve funcionar bem; Parece escutas embora, ou pelo menos mal escrito. 'z_vec' não é um bom variável de nome para o eixo y. O que é com a ordenação 'z, x, y', afinal?

Se ainda assim não funcionar, tente fazer mudanças aleatórias até ele -. Transpor a matriz, vetores negar até que você tenha um número par de erros de sinal, esse tipo de coisa

Também o seu tom de voz surge como espécie de rude, dado que você está pedindo estranhos de passar seu tempo ajudando-o.

Outras dicas

Este deve fazer você

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